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

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

新規登録して質問してみよう
ただいま回答率
85.48%
nginx

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

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

Q&A

解決済

2回答

1932閲覧

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

SeiichiAraki

総合スコア11

nginx

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

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

0グッド

0クリップ

投稿2017/09/13 00:44

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

nginx.conf

1http { 2 //中略 3 4 server { 5 listen 80; 6 server_name localhost; 7 8 #charset koi8-r; 9 10 access_log logs/host.access.log; 11 12 location / { 13 root html; 14 index index.html index.htm; 15 } 16 location /cp/ { 17 proxy_set_header X-Forwarded-Host $host; 18 proxy_set_header X-Forwarded-Server $host; 19 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 20 proxy_pass http://127.0.0.1:8080/ ; 21 proxy_redirect http://127.0.0.1:8080/ /; 22 23 } 24 25} 26

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

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

下記 curlで確認すると

curl

1curl -v http://127.0.0.1/cp/webajp/ 2* About to connect() to 127.0.0.1 port 80 (#0) 3* Trying 127.0.0.1... 4* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0) 5> GET /cp/webajp/ HTTP/1.1 6> User-Agent: curl/7.29.0 7> Host: 127.0.0.1 8> Accept: */* 9> 10< HTTP/1.1 302 11< Server: nginx/1.10.3 12< Date: Wed, 13 Sep 2017 00:45:14 GMT 13< Content-Length: 0 14< Location: http://127.0.0.1/webajp/dashboard 15< Connection: keep-alive 16< Set-Cookie: JSESSIONID=6A9A79E01F2545896AF1B5CD0B2AC026;path=/webajp;HttpOnly 17< 18* 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

となります。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

/webajp/ フォルダ名と同等

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

投稿2017/09/19 00:58

SeiichiAraki

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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/13 16:00

編集2017/09/14 03:50
TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SeiichiAraki

2017/09/13 23: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;
SeiichiAraki

2017/09/14 03:08

追加ありがとうございます。 Tomcat からのレスポンスの Location: ヘッダをみると、相対パスになっていますが proxy_redirect http://127.0.0.1:8080/ /cp/webajp/xxx という認識であっておりますでしょうか。
TaichiYanagiya

2017/09/14 03:13

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

2017/09/14 03:21

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

2017/09/14 03:40

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

2017/09/14 04: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のサーバへリダイレクトされます。
TaichiYanagiya

2017/09/14 05: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 設定を無効にした場合はどうなりますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問