使用 wordpress https 插件的 AWS ELB 和 wordpress 站点的无限重定向循环

Chi*_*Fur 12 https wordpress amazon-web-services amazon-elb

我已将 AWS ELB 配置为指向运行 Wordpress 3.2.1 的 Ubuntu 服务器。一切都在服务器上运行良好,直到我把它放在负载平衡器后面。

我将负载均衡器设置为将端口 80 转发到端口 80,将端口 443 转发到端口 80。

我设置了我的虚拟主机文件来检查来自 elb 的标头:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/status https://% {SERVER_NAME}%{REQUEST_URI} [L,R]

现在,每当我访问 https 网址时,都会收到以下消息:

此网页有重定向循环https://mywebsite.com/securepage/
的网页导致重定向次数过多

一旦我禁用 wordpress https 插件
( http://wordpress.org/extend/plugins/wordpress-https/ )
页面就可以工作,但现在充满了混合内容。应该是 https 的页面不再是 https。

一旦我直接访问服务器而不是通过 elb,它就会再次工作。

关于如何让它与 AWS ELB 一起工作的任何想法?

A.B*_*oll 22

尝试将此添加到您的httpd.conf.htaccess

SetEnvIfNoCase X-FORWARDED-PROTO "^https$" HTTPS
Run Code Online (Sandbox Code Playgroud)

使用负载均衡器 + HTTPS 时,您的网络服务器不知道前端正在使用 HTTPS,因此不断尝试重定向到 HTTPS 站点,而实际上 HTTPS 已被使用。

上面的代码会将 Amazon 的负载均衡器发送的标头 ( X-Forwarded-Proto: https) 转换为 Wordpress 和其他 PHP 脚本可以理解的环境变量 ( HTTPS=1)

  • 这将是正确的方法,因为 SSL 解密保留在 ELB 上 (3认同)

Jer*_*use 13

如果没有您发布 ELB 配置,我会冒险猜测 ELB 正在将 HTTPS (443/tcp) 流量重定向到 HTTP (80/tcp) 上的 EC2 实例。然后你.htaccess和插件试图将它重定向回 HTTPS,因为它是通过 HTTP 看到的。

去看看你的 EC2 控制台Network & Security > Load Balancers,我想你会看到Port Configuration类似的东西443 forwarding to 80 (HTTPS, Certificate: blah)


小智 5

根据亚马逊这里https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf修复是:

/** Detect if SSL is used. This is required since we are terminating SSL either on CloudFront or on ELB */ 
if (($_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'] == 'https') OR ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
    {$_SERVER['HTTPS']='on';}
Run Code Online (Sandbox Code Playgroud)

我仍然以无限循环结束,所以我将我的 WordPress 配置更改为:

define('WP_HOME','http://www.example.com');
define('WP_SITEURL','http://www.example.com');
Run Code Online (Sandbox Code Playgroud)

到:

define('WP_HOME','https://www.example.com');
define('WP_SITEURL','https://www.example.com');
Run Code Online (Sandbox Code Playgroud)

这将强制用户使用 https,即使他们输入 http,而且它可以轻松地离线开发站点,因为您只需将 WP_HOME 更新为本地主机,而 https 不再是默认设置