WordPress + CloudFront 灵活 SSL 最终进入重定向循环 (https)

Posted

技术标签:

【中文标题】WordPress + CloudFront 灵活 SSL 最终进入重定向循环 (https)【英文标题】:WordPress + CloudFront Flexible SSL ends up in redirect loop (https) 【发布时间】:2015-01-27 09:40:40 【问题描述】:

在 CloudFront 灵活 SSL 后面设置时通过 https 访问管理员时遇到问题。

通过 http 访问时,管理员工作正常,但一旦我更改为安全 https,它就会进入重定向循环。

我将以下行添加到wp-config.php 以在管理员中强制使用 SSL。

define('FORCE_SSL_ADMIN', true);

【问题讨论】:

我们知识库中关于redirect loops and Flexible SSL 的信息也应该有所帮助。 【参考方案1】:

这是因为 CloudFlare 的灵活 SSL 作为反向代理运行并通过 http 连接到 WordPress 安装。 Wordpress 认为您通过http 连接并重定向到https 资源。浏览器从 CloudFlare 请求 https 资源,CloudFlare 再次通过 http 从 WordPress 服务器请求资源,导致另一个重定向。

幸运的是,有一个解决方案。 CloudFlare 发送一个 http 标头 X-FORWARDED-PROTO,它是从浏览器到 CloudFlare 服务器的连接中使用的协议。我们可以使用它来告诉 WordPress,即使请求是通过 http 发生的,浏览器的链接也超过了 https

wp-config.php 文件中添加以下行:

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';

上一行在下一行之前也很重要:

require_once(ABSPATH . 'wp-settings.php');

进行修改后,重定向循环将停止,您将能够再次使用管理员。

这最终适用于所有反向代理服务器,而不仅仅是 CloudFlare。

【讨论】:

谢谢!对我来说最关键的部分是把它放在上面require_once(ABSPATH . 'wp-settings.php'); 在我的情况下,这并没有解决问题 - 然后我意识到我还需要使云端无效,因为它已经缓存了 301【参考方案2】:

在我的情况下,我们遇到了这个问题,因为我配置的 CloudFront 源不正确。

cloudfront-> origin -> Origin Protocol Policy -> Match Viewer 

在此设置后我的网站工作正常

【讨论】:

【参考方案3】:

就我而言,另一个问题来源是(我知道听起来很傻)DefaultRootObject。

我在我的 CloudFront 和 WordPress 上遇到了这个错误,这是我的太多重定向噩梦的问题。我发布这个是因为有人像我一样陷入了同样的愚蠢错误。

干杯

【讨论】:

以上是关于WordPress + CloudFront 灵活 SSL 最终进入重定向循环 (https)的主要内容,如果未能解决你的问题,请参考以下文章

将 Amazon S3 存储桶和 Cloudfront 与 SSL Wordpress 站点一起使用不会提供静态文件

Cloudfront + Woocommerce - 购物车未更新

了解 AWS CloudFront 签名 URL

将 CloudFront 与没有负载均衡器的单个 EC2 实例一起使用

AWS Cloudfront 到 EC2 的混合 PHP 和静态内容

有啥方法可以将 AWS Cloudfront 设置为指向静态 IP 地址(在 GoDaddy 上托管的 WP)?