我有一个反向代理,它在外部执行 HTTPS,但在内部执行 HTTP。
这意味着默认情况下,应用内 URL 将使用 HTTP 作为方案,因为这是联系它的方式。
代理如何告诉后端应该使用 HTTPS?
我有一个反向代理,它在外部执行 HTTPS,但在内部执行 HTTP。
这意味着默认情况下,应用内 URL 将使用 HTTP 作为方案,因为这是联系它的方式。
代理如何告诉后端应该使用 HTTPS?
代理可以向它接收的请求添加额外(或覆盖)标头并传递到后端。这些可用于将信息传达给后端。
到目前为止,我已经看到了一些用于在 URL 方案中强制使用 https 的方法:
X-Forwarded-Protocol: https
X-Forwarded-Ssl: on
X-Url-Scheme: https
维基百科还提到:
# a de facto standard:
X-Forwarded-Proto: https
# Non-standard header used by Microsoft applications and load-balancers:
Front-End-Https: on
这是您应该添加到apache上的 VirtualHost 的内容:其他代理应该具有类似的功能
RequestHeader set X-FORWARDED-PROTOCOL https
RequestHeader set X-Forwarded-Ssl on
# etc.
我认为最好将它们全部设置,或者设置一个有效并删除其他已知的。以防止邪恶的客户惹恼他们。
我花了几个小时在谷歌上搜索才能找到适合我的环境的神奇设置。我在码头应用服务器和 apache2 http 服务器前面有一个 SSL httpd Apache 反向代理。这个答案实际上给了我有效的信息。对我来说,添加:
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
到站点 conf 文件足以让目标在响应中构建链接时使用 https 而不是 http 作为协议。我尝试了X-FORWARDED-PROTOCOL
上述方法,但没有奏效。希望这将有助于未来的谷歌搜索!