我有一个反向代理,它在外部执行HTTPS,但在内部执行HTTP。
这意味着默认情况下,应用内网址会将HTTP作为方案,因为这是与其联系的方式。
代理如何告诉后端应该使用HTTPS?
答案 0 :(得分:30)
代理可以为其收到的请求添加额外(或覆盖)标头,并传递给后端。这些可用于将信息传递给后端。
到目前为止,我已经看到一对用于强制在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
这应该添加到apache上的VirtualHost:其他代理应具有类似的功能
RequestHeader set X-FORWARDED-PROTOCOL https
RequestHeader set X-Forwarded-Ssl on
# etc.
我认为最好将它们全部设置,或设置一个可以工作并删除其他已知的。为了防止邪恶的客户搞乱他们。
答案 1 :(得分:0)
我花了几个小时的时间来寻找适合自己环境的魔术设置。我在码头应用服务器和apache2 http服务器前面有一个SSL httpd apache反向代理。这个answer实际上给了我有用的信息。对我而言,在站点conf文件中添加 RequestHeader集“ X-Forwarded-Proto” expr =%{REQUEST_SCHEME} 足以使目标在构建链接时使用https而非http作为协议。响应。我在上面尝试了X-FORWARDED-PROTOCOL,但是没有用。希望这对以后的Google搜索有帮助!