39

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

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

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

4

2 回答 2

41

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

到目前为止,我已经看到了一些用于在 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

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

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

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

于 2013-04-16T16:49:21.850 回答
3

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

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

到站点 conf 文件足以让目标在响应中构建链接时使用 https 而不是 http 作为协议。我尝试了X-FORWARDED-PROTOCOL上述方法,但没有奏效。希望这将有助于未来的谷歌搜索!

于 2018-06-29T22:01:47.433 回答