使用Wordpress https插件与AWS ELB和wordpress网站进行无尽重定向循环


11

我已经配置了一个AWS ELB指向运行Wordpress 3.2.1的Ubuntu Server。在服务器上一切正常之前,直到将其放在负载均衡器之后。

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

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


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

现在,每当我转到https url时,都会收到以下消息:

该网页具有重定向循环
该网页位于https://mywebsite.com/securepage/,导致重定向过多

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

当我直接访问服务器而不是通过elb时,它将再次起作用。

关于如何使它与AWS ELB一起使用的任何想法?


您是否更新了固定链接?通常我们必须更新wordpress上的永久链接设置
user905953

Answers:


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)


1
这个人也有同样的问题。 forums.aws.amazon.com/...
ChickenFur


您的权利,我转发443 80
ChickenFur

我已经在AWS上经营我的一个客户已有两年多了……当我读到您的问题时,这是我怀疑的第一件事。
杰里米·布斯

1
将LB的指向从443更改为443可以解决它:)谢谢!
ChickenFur 2011年

17

尝试将其添加到您httpd.conf.htaccess

SetEnvIfNoCase X-FORWARDED-PROTO "^https$" HTTPS

当使用负载平衡器+ HTTPS时,您的Web服务器不会意识到在前端使用了HTTPS,因此,在实际上已经使用HTTPS的情况下,请继续尝试重定向到HTTPS站点。

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


3
这是正确的方法,因为SSL解密仍保留在ELB上
toske 2015年

1
如果您使用的是nginx,则类似的附加项将是:fastcgi_param HTTPS on;
Akash Budhia

这个帖子结束了我一个小时的痛苦... THX
Daywalker

3

根据亚马逊在这里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';}

我仍然以无休止的循环而告终,因此我将WordPress配置更改为:

define('WP_HOME','http://www.example.com');
define('WP_SITEURL','http://www.example.com');

至:

define('WP_HOME','https://www.example.com');
define('WP_SITEURL','https://www.example.com');

即使用户键入http,这也会强制用户使用https,此外,由于您只需将WP_HOME更新为本地主机,并且https不再是默认设置,因此可以轻松地离线开发网站。


1

引用另一个有用的帖子https://serverfault.com/a/858308/450836

对我来说,将$ _SERVER ['HTTPS'] ='on'设置为足够;在wp-config.php中。我正在使用终止ELB上的SSL的AWS ELB。因此,nginx在端口80(清漆后为8080)上接受请求,并且在您明确告知PHP该站点已使用https之前,似乎wordpress无法对其进行处理...

对于非SSL ELB侦听器,我使用单独的配置将所有流量重定向到https作为默认侦听器。


0

正如@Tim所建议的那样,$_SERVER['HTTPS']='on';wp-config.php中的代码对我有用。

我还将此添加到我的.htaccess文件中以强制HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

0

修复了AWS ALB中过多的重定向问题

启用标头模块,然后在apache配置中添加以下条目

SetEnvIf X-Forwarded-Proto“ https” HTTPS = on RequestHeader设置HTTPS“ on” env = HTTPS

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.