如何在Amazon Load Balancer后面修正WordPress的HTTPS问题?

我以前有这个问题。在Amazon EC2负载平衡器后面运行Wordpress(或其他PHP脚本)时,这些脚本不会意识到它们正在运行在https://协议上,并导致诸如无限制的重定向循环和HTTPS警告等问题(“这里有一些内容正在以非安全的方式请求页面…“)。

我在这里找到了一个解决方案,但需要修改Wordpress内核,这对可更新性是不利的:
https://wordpress.org/support/topic/when-behind-amazon-web-services-elastic-load-balancer-causes-endless-redirect

有没有办法解决这个没有修改Wordpress核心?我正在使用Apache 2.2。

最佳答案
作为您提供的链接,对于WordPress,问题在于is_ssl()函数,其中大多数PHP软件都显式检查$ _SERVER [‘HTTPS’]和$ _SERVER [‘SERVER_PORT’]以检查当前页面是否正在在https://上下文中访问。

当您的页面通过HTTPS访问时,但是Amazon负载平衡器正在执行SSL卸载,并且在非SSL端口80上实际请求您的内容,因此Web服务器,PHP或其他任何内容不了解或看到它正在通过https://访问。

解决这个问题的是,亚马逊的ELB发送了事实上的标准X-Forwareded-Proto HTTP头,我们可以使用它来确定客户端在负载平衡器的另一端实际使用的协议。

使用Apache 2.2,您可以使用以下行:

<IfModule mod_setenvif.c>
  SetEnvIf X-Forwarded-Proto "^https$" HTTPS
</IfModule>

这只是读取X-Forwared-Proto标题,如果它等于https,那么将HTTPS环境变量设置为1. PHP将看到此环境变量,最终将变为$ _SERVER [‘HTTPS’],等于1 – 就像“真正的”本机SSL请求一样。

转载注明原文:如何在Amazon Load Balancer后面修正WordPress的HTTPS问题? - 代码日志