2

我正在尝试使用 nginx 作为两个 Tomcat 实例的反向代理,每个实例都在自己的 VM 中。问题是:当我开始向 proxy_pass 参数添加文件夹路径时,我收到 310 错误:重定向太多。

我究竟做错了什么?任何建议表示赞赏。第一个服务器工作正常,但如前所述,第二个添加了文件夹路径将无法工作。

这是我的 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

我认为可能发生的是重定向发生在 Tomcat 端,而不是 Nginx 端,所以我认为您可能没有给我们足够的信息来解决这个问题。

但是,您可以通过添加以下内容为 Nginx启用重写日志来轻松调查此问题:

rewrite_log on;

然后,您将能够准确地看到它正在重写什么以及它是否/在哪里进入循环,如果它在 Nginx 端。

编辑

我刚刚在我的 nginx 日志中发现了这一行(GET .../login/login 行重复了大约 20 次: GET /OpenClinica/pages/login/login GET /OpenClinica/pages/login/login

这听起来绝对像是重定向纯粹发生在 Tomcat 内部,而不是内部 Nginx 重定向,因为请求在它们之间正确传递,但是您的浏览器可以看到它一直被重定向到同一个地方。

如果没有查看所有相关代码,我无法确定确切的细节,但看起来有些代码相当于:

  1. 用户是在 /pages/login/login 登录还是登录页面?
  2. 不 - 将他们重定向到 /pages/login/login 的登录页面

因为 Nginx 将请求代理到:

http://172.16.75.99/OpenClinica/;

它总是添加OpenClinica到 URL 的开头,因此 Java 应用程序认为它是 never /pages/login/login,因此它会不断重定向。

您可以通过使 Java 重定向更智能或通过更改代理设置以删除OpenClinica路径来解决此问题,即

proxy_pass http://172.16.75.99

没有尾随斜杠以使 URL 路径完全按照用户的请求传递到 Tomcat 服务器。

(您也可以通过appBase在 Tomcat 中设置应用程序的路径来设置它,以便它知道期望 URL 路径以OpenClinica- 但我不是 Tomcat 专家。)

于 2013-05-03T19:44:10.123 回答