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

时间:2012-04-16 02:44:27

标签: ruby-on-rails http nginx

我已将nginx配置为将https流量代理到在同一台计算机上运行的http服务器。

当我将nginx配置为从https端口443侦听/ proxy时,一切正常。但我真的想听非标准端口。当我配置非标准端口时,nginx接收请求并将其发送到我的http服务器,但是服务器正在响应HTTP重定向回浏览器,告诉它重定向到'https:// server。 com / someurl“。我的意思是重定向网址看起来很好,除了它缺少正确的端口。我错过了我需要在代理中设置的HTTP标头吗?

具体来说,我正在运行Tracks的http实例; http://getontracks.org。如果重要的话。

我的(使用标准端口)nginx服务器配置:

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

2 个答案:

答案 0 :(得分:24)

问题源于这一行 -

proxy_set_header Host $host;

您的网络服务器(WEBrick)在发出重定向响应时依次包括此内容。

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

proxy_set_header Host $host:$server_port;

应解决此问题。

答案 1 :(得分:1)

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

由于Tracks是一个Rails应用程序,如果您在问题中添加相应的标记,最终可能会获得更多知识渊博的答案。