反向代理的事实标准是什么告诉使用后端SSL?

Chr*_*ing 30 https reverse-proxy http-headers

我有一个反向代理,在外部执行HTTPS,但内部使用HTTP.

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

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

Chr*_*ing 32

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

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

X-Forwarded-Protocol: https
X-Forwarded-Ssl: on
X-Url-Scheme: https
Run Code Online (Sandbox Code Playgroud)

维基百科也提到:

# a de facto standard:
X-Forwarded-Proto: https
# Non-standard header used by Microsoft applications and load-balancers:
Front-End-Https: on
Run Code Online (Sandbox Code Playgroud)

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

RequestHeader set X-FORWARDED-PROTOCOL https
RequestHeader set X-Forwarded-Ssl on
# etc.
Run Code Online (Sandbox Code Playgroud)

我认为最好将它们全部设置,或设置一个可以工作并删除其他已知的.防止邪恶的客户搞乱他们.

  • [RFC 7239:转发HTTP扩展](https://tools.ietf.org/html/rfc7239):) (7认同)
  • @mmoya哦,闪亮的新RFC ... 2014年6月,薄荷条件.;-) (4认同)
  • 它是X-Forwarded-Proto,而不是X-Forwarded-Protocol,对吧? (3认同)
  • 对于遇到此问题的任何人,您可能想要 X-Forwarded-Proto 而不是 X-Forwarded-Protocol。协议是非标准的,而 AWS、RFC 7239、docker nginx-proxy 和许多其他协议使用 Proto。(此外,如果您引用搜索词,googlebattle 实际上显示 Proto 以大比分获胜。) (3认同)
  • @mmoya我见过他们俩.后者甚至在[googlebattle]中获胜(http://www.googlebattle.com/?domain=x-forwarded-proto&domain2=x-forwarded-protocol&submit=Go%21). (2认同)