我已经configuration了AWS ELB以指向运行Wordpress 3.2.1的我的Ubuntu服务器。 一切工作良好的服务器,直到我把它放在负载平衡器后面。
我将负载均衡器设置为将端口80转发到端口80,将端口443转发到端口80。
我设置我的虚拟主机文件来检查elb的头文件:
RewriteEngine On
RewriteCond%{HTTP:X-Forwarded-Proto}!https
RewriteRule!/状态https://% {SERVER_NAME}%{REQUEST_URI} [L,R]
现在,每当我去到一个httpsurl,我得到这个消息:
此网页有redirect循环
https://mywebsite.com/securepage/上的网页导致了太多的redirect
只要我禁用wordpress https插件
( http://wordpress.org/extend/plugins/wordpress-https/ )
这些网页可以正常工作,但现在已经充满了混合内容 应该是https的页面不再是https。
只要我直接访问服务器,而不是通过ELB,它再次工作。
有关我如何才能使用AWS ELB工作的任何想法?
如果不发布ELBconfiguration,ELB会将HTTPS(443 / tcp)stream量redirect到HTTP(80 / tcp)上的EC2实例,那么我将冒险猜测。 然后你是.htaccess和插件试图redirect到HTTPS,因为它是通过HTTP看到的。
去看看你的EC2控制台下的Network & Security > Load Balancers ,我想你会看到Port Configuration说一些东西沿线443 forwarding to 80 (HTTPS, Certificate: blah)
尝试添加到您的httpd.conf或.htaccess
SetEnvIfNoCase X-FORWARDED-PROTO "^https$" HTTPS
当使用负载平衡器+ HTTPS时,您的Web服务器不知道前端正在使用HTTPS,因此在尝试redirect到HTTPS站点时,实际上HTTPS已被使用。
以上将把Amazon Load Balancer发送的头( X-Forwarded-Proto: https )转换为Wordpress和其他PHP脚本可以理解的环境variables( HTTPS=1 )
据亚马逊在这里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';}
我仍然结束了无限循环,所以我改变了我的WordPressconfiguration为:
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');
这将强制用户使用https,即使他们键入http,加上它可以很容易地脱机开发网站,因为您只是将WP_HOME更新为本地主机,并且https不再是默认值