无论我做什么,Nginx 都会不断破坏我的 URL。我相信这只发生在响应包含重定向时。我相信我已经尝试了 wiki 和 google 上前 20 页左右的所有建议组合,但都无济于事。
我的配置看起来像这样:
upstream tomcat {
server 10.0.0.1:8080;
}
upstream opsview {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://tomcat/;
proxy_redirect http://tomcat/ /;
server_name_in_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我努力了:
- 两个上游(它们的行为不同)
- 直接传递并重定向到 ip:port,而不是上游
- 带或不带尾部斜杠
- proxy_redirect 关闭
- server_name_in_redirect 关闭或未关闭
- 带有和不带有 header 指令
不断出现的错误情况:
- 如果代理到外部主机,我可能会发现我的浏览器被重定向到http://tomcat/。
- 如果代理到同一主机上的另一个服务,我可能会发现我的浏览器重定向到另一个端口:http://example.com:3000/。
我到底做错了什么?
答案1
您应该检查上游Location:
在重定向时在 HTTP 标头中真正返回的内容。可能Location:
有类似这样的 URLhttp://tomacat.fully.qualified.name/somepath/并且这不会匹配proxy_redirect http://tomcat/ /
。