12

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

当我将 nginx 配置为从 https 端口 443 侦听/代理时,一切正常。但我真的想在非标准端口上侦听。当我配置一个非标准端口时,nginx 收到请求并将其发送到我的 http 服务器,正如它应该的那样,但服务器正在响应一个 HTTP 重定向回浏览器,告诉它重定向到'https://server. com/someurl”。我的意思是重定向 url 看起来不错,只是它缺少正确的端口。我是否缺少需要在代理中设置的 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;
}
4

2 回答 2

28

问题源于这条线 -

proxy_set_header Host $host;

在发出重定向响应时,您的 Web 服务器(WEBrick)又包含此内容。

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

proxy_set_header Host $host:$server_port;

这应该解决这个问题。

于 2012-07-14T15:21:59.747 回答
1

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

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

于 2012-04-16T16:44:32.263 回答