Nginx的代理https非标准端口上的HTTP?

我有nginxconfiguration为代理httpsstream量到同一台机器上运行的http服务器。

一切工作正常,当我configurationnginx从https端口443监听/代理。但我真的想听一个非标准的端口。 当我configuration一个非标准的端口时,nginx会收到请求并将其发送到我的http服务器,但服务器正在响应HTTPredirect回到浏览器,告诉它redirect到“https://服务器”。 com / someurl“。我的意思是redirecturl看起来不错,只是它缺less正确的端口。我是否缺less一个HTTP头,我需要在代理中设置?

具体来说,我正在运行一个轨道的HTTP实例; http://getontracks.org 。 如果它很重要。

我的(在标准端口上工作)nginx服务器configuration:

location /{ proxy_pass http://localhost:50000; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_redirect off; } 

这个问题源于线 –

 proxy_set_header Host $host; 

发布重定向响应时,您的Web服务器(WEBrick)又将其包括在内。

您可以将其更改为包含非标准端口 –

 proxy_set_header Host $host:$server_port; 

这应该解决这个问题。

这是上游主机(Tracks)上运行的应用程序的问题,而不是Web服务器配置(除非上游Web服务器配置中包含重写规则)。 不同的应用程序处理这些情况的方式不同:有些需要一个显式的配置参数告诉他们应用程序可以到达的实际URL,有些使用某些HTTP头,有些使用其他HTTP头。

由于Tracks是一个Rails应用程序,如果你在你的问题中添加一个相应的ruby-on-rails标签,你可能会得到更多的知识。