【问题标题】:Nginx proxy https to http on non standard port?Nginx代理https到非标准端口上的http?
【发布时间】:2012-04-16 02:44:27
【问题描述】:

我已将 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;
}

【问题讨论】:

    标签: ruby-on-rails http nginx


    【解决方案1】:

    问题源于这条线-

    proxy_set_header Host $host;
    

    您的网络服务器 (WEBrick) 在发出重定向响应时反过来包含此内容。

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

    proxy_set_header Host $host:$server_port;
    

    应该可以解决这个问题。

    【讨论】:

    • 非常好。这解决了我在 nginx 反向代理后面运行的烧瓶应用程序试图生成正确的 url 的问题。 flask snippet 35 中描述的非标准端口,无需触摸该 sn-p。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢。我发现一些论坛帖子建议设置一个 HTTP X-Forwarded-Port 标头,即使这看起来更像是一个非标准的“非标准”标头。我尝试在 nginx 配置中设置它,但没有运气。无论如何,正如您所说,我想在上游主机上运行的应用程序需要了解并采取类似的措施。
    猜你喜欢
    • 2015-08-16
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2020-04-23
    • 2018-06-25
    • 2013-03-03
    • 2020-10-05
    相关资源
    最近更新 更多