我试图使用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;
}
edit:目前没有启用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端,而不是Nginx端,所以我认为你可能没有给我们足够的信息来弄清楚这一点。
然而,你可以很容易地调查这个问题,通过添加:
rewrite_log on;
这样你就能准确地看到它正在重写什么,如果它在Nginx端,它是否/在哪里进入循环。
编辑
我刚发现这个行nginx日志(GET…/登录/登录台词重复约20次:GET/OpenClinica/页面/登录/登录GET/OpenClinica/页面/登录/登录
这听起来就像重定向纯粹发生在Tomcat内部,而不是Nginx内部重定向,因为请求在它们之间正确传递,但是你的浏览器可以看到它一直被重定向到相同的地方。
在没有看到所有相关代码的情况下,我无法确定确切的细节,但看起来有些代码相当于:
- 用户是否已登录或正在登录页面/pages/login/login ?
- 不-将它们重定向到登录页面/pages/login/login
因为Nginx正在代理请求:
http://172.16.75.99/OpenClinica/;
它总是将OpenClinica
添加到URL的开头,因此Java应用程序认为它永远不会是/pages/login/login
,因此它一直重定向。
您可以通过使Java重定向更智能或通过更改代理设置来删除OpenClinica
路径(即
proxy_pass http://172.16.75.99
不带尾斜杠,以使URL路径完全按照用户的请求传递给Tomcat服务器。
(您也可以通过在Tomcat中为应用程序设置appBase
路径来设置它,以便它知道期望以OpenClinica
开头的URL路径-但我不是Tomcat专家。)