2

それぞれ独自の VM にある 2 つの Tomcat インスタンスのリバース プロキシとして nginx を使用しようとしています。問題は、フォルダー パスを proxy_pass 引数に追加し始めると、310 エラーが発生することです: リダイレクトが多すぎます。

私は何を間違っていますか?アドバイスをいただければ幸いです。最初のサーバーは問題なく動作しますが、前述のように、追加されたフォルダー パスを持つ 2 番目のサーバーは機能しません。

これが私のnginx構成です:

server {
  listen 80;
  server_name oc.domain.tld;
  location / {

       proxy_pass http://172.16.81.73;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

server {
  listen 80;
  server_name test.domain.tld;
  location / {
       proxy_pass http://172.16.75.99/OpenClinica/;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

server {
   listen       80  default_server;
   server_name  _;
   return       444;
}

編集: 現時点では SSL が有効になっていません (tomcat と nginx の両方)

edit2: 書き換えログが空です (オンにすると、通知レベルでデバッグします)
nginx ログでこの行を発見しました (GET .../login/login 行が約 20 回繰り返されます:

190.215.166.212 - - [04/May/2013:22:29:21 -0400] "GET /OpenClinica/pages/login/login HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"
190.215.166.212 - - [04/May/2013:22:29:21 -0400] "GET /OpenClinica/pages/login/login HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"
190.215.166.212 - - [04/May/2013:22:29:25 -0400] "-" 400 0 "-" "-"
190.215.166.212 - - [04/May/2013:22:29:25 -0400] "-" 400 0 "-" "-"

nginx が ....login/login をループで要求しているようです。問題はおそらくTomcat側にありますか?

4

1 に答える 1

2

リダイレクトが Nginx 側ではなく Tomcat 側で発生している可能性が高いため、これを理解するのに十分な情報が提供されていない可能性があります。

ただし、次を追加してNginxの書き換えログを有効にすることで、この問題を簡単に調査できます。

rewrite_log on;

Nginx側にある場合は、何を書き直しているのか、ループに入っているのか、どこでループしているのかを正確に確認できます。

編集

nginx ログでこの行を発見しました (GET .../login/login 行は約 20 回繰り返されます: GET /OpenClinica/pages/login/login GET /OpenClinica/pages/login/login

リクエストがそれらの間で正しく渡されているため、Nginx の内部リダイレクトではなく、Tomcat 内でリダイレクトが純粋に発生しているように聞こえますが、ブラウザーは常に同じ場所にリダイレクトされていることを確認できます。

関連するすべてのコードを見ないと正確な詳細を確認することはできませんが、一部のコードが次と同等のことを行っているようです。

  1. ユーザーはログインしているか、または /pages/login/login のログイン ページにいますか?
  2. いいえ - /pages/login/login のログイン ページにリダイレクトします

Nginxはリクエストを次のようにプロキシしているため:

http://172.16.75.99/OpenClinica/;

これは常にOpenClinicaURL の先頭に追加されるため、Java アプリケーションはそれが never/pages/login/loginであると認識し、リダイレクトを続けます。

OpenClinicaJavaリダイレクトをよりスマートにするか、プロキシ設定を変更してパスを削除することで、これを修正できます。

proxy_pass http://172.16.75.99

ユーザーが要求したとおりに URL パスが Tomcat サーバーに渡されるようにするための末尾のスラッシュなし。

(Tomcat でアプリケーションのパスを設定することで、これを設定できる場合もあります。これによりappBase、Tomcat で始まる URL パスを予期することが認識されますOpenClinicaが、私は Tomcat の専門家ではありません。)

于 2013-05-03T19:44:10.123 に答える