質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • nginx

    818questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Tomcat

    548questions

  • Spring Boot

    467questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Tomcatとの連携のためNginx のリバースプロキシについて

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,821

SeiichiAraki

score 3

下記のようにngixのリバースプロキシを設定した場合、tomcatのApサーバのアプリが、相対パスにリダイレクトすると、ap側に返って来ないのですが、
どこがおかしいのでしょうか

http {
    //中略

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        access_log  logs/host.access.log;

        location / {
            root   html;
            index  index.html index.htm;
        }
    location  /cp/ {
        proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8080/ ;
        proxy_redirect http://127.0.0.1:8080/ /;

    }

}

アクセスルート
http://{webserverのip}/cp/webajp/

とすると http://{webserverのip}/cp/webajp/dashboardへリダイレクト想定

下記 curlで確認すると

curl -v  http://127.0.0.1/cp/webajp/
* About to connect() to 127.0.0.1 port 80 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET /cp/webajp/ HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1
> Accept: */*
> 
< HTTP/1.1 302 
< Server: nginx/1.10.3
< Date: Wed, 13 Sep 2017 00:45:14 GMT
< Content-Length: 0
< Location: http://127.0.0.1/webajp/dashboard
< Connection: keep-alive
< Set-Cookie: JSESSIONID=6A9A79E01F2545896AF1B5CD0B2AC026;path=/webajp;HttpOnly
< 
* Connection #0 to host 127.0.0.1 left intact


http://127.0.0.1/webajp/dashboard へリダイレクトされてしまう

Nginx 1.10.3
Tomcat 8.5.11

となります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

proxy_redirect http://127.0.0.1:8080/ /cp/;


とするか、もしくは、デフォルト(proxy_redirect 設定無し)にするのではないでしょうか。


(2017/09/14 10:50) 追記

curl -D - http://127.0.0.1:8080/webajp/ で Tomcat からのレスポンスの Location: ヘッダを確認ください。
それを変換するよう、proxy_redirect を設定するといいと思います。


(2017/09/14 12:50) 追記

ちょっと強引ですが、Tomcat からのレスポンスの Location: ヘッダが "/", "http://127.0.0.1/", "http://127.0.0.1:8080/" のどれが来ても変換してしまうようにする。

proxy_redirect http://127.0.0.1:8080/ /cp/;
proxy_redirect http://127.0.0.1/ /cp/;
proxy_redirect / /cp/;

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/14 08:56

    回答いただきましてありがとうございます。

    proxy_redirectを入れても
    proxy_redirect offにしても

    webサーバからAP(tomcat)へ遷移せず
    webサーバへリダイレクトされてしまいます。

    headerを入れてみるのを試行しています。

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host:8080;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    キャンセル

  • 2017/09/14 12:08

    追加ありがとうございます。
    Tomcat からのレスポンスの Location: ヘッダをみると、相対パスになっていますが

    proxy_redirect http://127.0.0.1:8080/ /cp/webajp/xxx

    という認識であっておりますでしょうか。

    キャンセル

  • 2017/09/14 12:13

    > Tomcat からのレスポンスの Location: ヘッダをみると、相対パスになっていますが
    具体的にどうなっていますか?

    キャンセル

  • 2017/09/14 12:21

    下記の通りになります。
    $ curl -D - http://127.0.0.1:8080/webajp/
    HTTP/1.1 302
    Set-Cookie: JSESSIONID=31B71B192D108E199BBF69D38F9D4D98;path=/webajp;HttpOnly
    Location: /webajp/test

    キャンセル

  • 2017/09/14 12:25

    > Location: /webajp/test

    これは正しいのでしょうか?
    Tomcat から "Location: http://127.0.0.1:8080/webajp/test" と応答するようにできませんでしょうか。

    キャンセル

  • 2017/09/14 12:40

    無理やりかもしれませんが、"proxy_redirect /webajp/ /cp/webajp/;" と設定するとか。

    キャンセル

  • 2017/09/14 13:37

    > Location: /webajp/test
    はい、正しいです
    かきのアプローチになりますよね。
    >Tomcat から "Location: http://127.0.0.1:8080/webajp/test" と応答するようにできませんでしょうか。

    12:50 にいただいた、回答での対応してみましたが、

    [root@web ~]# curl -v http://172.17.100.1/cp/webajp/
    * About to connect() to 172.17.100.1 port 80 (#0)
    * Trying 172.17.100.1...
    * Connected to 172.17.100.1 (172.17.100.1) port 80 (#0)
    > GET /cp/webajp/ HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: 172.17.100.1
    > Accept: */*
    >
    < HTTP/1.1 302
    < Server: nginx/1.10.3
    < Date: Thu, 14 Sep 2017 04:28:07 GMT
    < Content-Length: 0
    < Connection: keep-alive
    < Set-Cookie: JSESSIONID=7E48C7230EDF253314A63F3D1D14F4BB;path=/webajp;HttpOnly
    < Location: http://172.17.100.1/webajp/test
    <
    webのサーバへリダイレクトされます。

    キャンセル

  • 2017/09/14 14:25

    おかしいですね。
    curl で 8080 番ポートに接続したときは "Location: /webajp/test" で、Nginx を経由すると "Location: http://172.17.100.1/webajp/test" (proxy_redirect を設定しなくても) に変わっているのですね?
    この、"http://172.17.100.1" は Nginx では補完していないと思うのですが、Tomcat 側で Host, X-Forwarded-* ヘッダを見て、Location に "http://172.17.100.1" を付けているのでしょうか?

    "curl -D - http://127.0.0.1/cp/webajp" (Tomcat から "Location: http://127.0.0.1/webajp/test" が返ることを期待して)の場合、proxy_redirect で "/cp/" 付きに変換されませんか?

    また、proxy_set_header 設定を無効にした場合はどうなりますでしょうか?

    キャンセル

0

最終的には、下記のようにしました。

コンテキストパスとフォルダを揃えました。

/webajp/  フォルダ名と同等

アプリケーション側で、今回での設定を行うと、リダイレクトループが発生することが
判明しました。フォルダ名を変更するか、コンテキスト変えるかで確認中です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • nginx

    818questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Tomcat

    548questions

  • Spring Boot

    467questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。