nginx代理保持与(redirect?)url的混乱

不pipe我做什么,Nginx不断打破我的url。 我相信这只有当响应包含redirect时才会发生。 我相信我已经尝试过维基的所有build议和谷歌的前20个左右的页面的组合,现在无济于事。

我的configuration看起来像这样:

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; } } 

我努力了:

  1. 两个上游(和他们的行为不同)
  2. 直接传递并redirect到ip:port而不是上游
  3. 有和没有尾随斜杠
  4. proxy_redirectclosures
  5. 有和没有closuresserver_name_in_redirect
  6. 有和没有标题指令

不断出现的错误情况:

  • 如果代理到外部主机,我很容易发现我的浏览器字面上redirect到http:// tomcat / 。
  • 如果在同一主机上代理另一个服务,我很可能会发现我的浏览器redirect到另一个端口: http : //example.com : 3000 / 。

我究竟做错了什么?

在redirect时,您应该检查Location: HTTP头中真正的上游返回结果。 有可能是Location:有像http://tomacat.fully.qualifyed.name/somepath/这样的URL,这不会匹配proxy_redirect http://tomcat/ /