由于客户端和服务器之间有多个代理,因此我无法使用 Apache 将 HTTP 重定向到 HTTPS。
HTTPS 正在面向互联网的负载均衡器上终止,所有其他设备(包括服务请求的 Apache 服务器)都在使用 HTTP。
我可以看到 Apache 所关注的只是链中最后一个代理的 X-Forwarded-Proto,即 HTTP。
我怎样才能强制它查看真实的 X-Forwarded-Proto 标头(远程客户端的)?
答案1
对于来自 http 后端的重定向,您在反向代理中应该关注的唯一指令是:
ProxyPassReverse
如果重定向来自反向代理后端链,无论它们发送什么,如果您对任何内部名称设置了 ProxyPassReverse 指令,Apache 将更改位置中的主机和方案(http / s)作为客户端最初发送的。
好消息是 ProxyPassReverse 可以根据需要指定多次。
例如,如果你的反向代理托管公共https://main.example.com并且有无数的后端向你发送重定向,例如:
Location: http://something.example.com/somesome
Location: http://otherthing.internal.example.com/heresomething/jkjljl.whatever
Location: http://deepdowninthechain.some.exampe.com/therethere/there/there
您所要做的就是添加:
ProxyPassReverse / http://something.example.com/
ProxyPassReverse / http://otherthing.internal.example.com/
ProxyPassReverse / http://deepdowninthechain.some.exampe.com/
Apache HTTPD 将会把所有这些 Location 标头返回到原始客户端所请求的内容:https://main.example.com/whatever...