【问题标题】:What's the de facto standard for a Reverse Proxy to tell the backend SSL is used?反向代理告诉后端 SSL 被使用的事实标准是什么?
【发布时间】:2013-04-09 04:31:48
【问题描述】:

我有一个反向代理,它在外部执行 HTTPS,但在内部执行 HTTP。

这意味着默认情况下,应用内 URL 将使用 HTTP 作为方案,因为这是联系它的方式。

代理如何告诉后端应该使用HTTPS?

【问题讨论】:

    标签: https http-headers reverse-proxy


    【解决方案1】:

    代理可以向它接收的请求添加额外(或覆盖)标头并传递到后端。这些可用于将信息传达给后端。

    到目前为止,我已经看到一对用于在 URL 方案中强制使用 https:

    X-Forwarded-Protocol: https
    X-Forwarded-Ssl: on
    X-Url-Scheme: https
    

    wikipedia 还提到:

    # a de facto standard:
    X-Forwarded-Proto: https
    # Non-standard header used by Microsoft applications and load-balancers:
    Front-End-Https: on
    

    这是您应该添加到 上的 VirtualHost 的内容:其他代理应该具有类似的功能

    RequestHeader set X-FORWARDED-PROTOCOL https
    RequestHeader set X-Forwarded-Ssl on
    # etc.
    

    我认为最好将它们全部设置,或者设置一个有效的并删除其他已知的。以防止邪恶的客户与他们纠缠不清。

    【讨论】:

    • 它是 X-Forwarded-Proto,而不是 X-Forwarded-Protocol,对吧?
    • @mmoya 我见过他们俩。后者甚至在googlebattle 中获胜。
    • @mmoya 哦,闪亮的新 RFC...2014 年 6 月,完好无损。 ;-)
    • 对于遇到这种情况的任何人,您可能需要 X-Forwarded-Proto 而不是 X-Forwarded-Protocol。协议是非标准的,而 AWS、RFC 7239、docker nginx-proxy 和许多其他人使用 Proto。 (此外,如果您引用搜索词,googlebattle 实际上显示 Proto 以很大优势获胜。)
    【解决方案2】:

    我花了几个小时在谷歌上搜索才能找到适合我的环境的神奇设置。我在码头应用服务器和 apache2 http 服务器前面有一个 SSL httpd Apache 反向代理。这个answer 实际上给了我有用的信息。对我来说,添加:

    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
    

    到站点 conf 文件足以让目标在响应中构建链接时使用 https 而不是 http 作为协议。我尝试了上面的X-FORWARDED-PROTOCOL,但是没有用。希望这对未来的 Google 搜索有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2015-12-13
      • 1970-01-01
      相关资源
      最近更新 更多