A.B*_*oll 48 wordpress https amazon-ec2 amazon-web-services amazon-elb
我以前遇到过这个问题.在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.
A.B*_*oll 64
正如你给出的链接建议的那样,对于Wordpress,问题在于is_ssl()函数,就像大多数PHP软件一样,显式检查$_SERVER['HTTPS']并$_SERVER['SERVER_PORT']检查当前页面是否在https://上下文中被访问.
当您的页面通过HTTPS访问,但是Amazon Load Balancer正在执行SSL卸载并实际在非SSL端口80上请求您的内容时,Web服务器,PHP或其他任何内容都无法理解或看到它正在通过https://访问.
解决这个问题的方法是,亚马逊的ELB发送事实上的标准X-Forwareded-ProtoHTTP标头,我们可以用它来确定客户端在Load Balancer另一侧实际使用的协议.
使用Apache 2.2,您可以使用以下内容:
<IfModule mod_setenvif.c>
SetEnvIf X-Forwarded-Proto "^https$" HTTPS
</IfModule>
Run Code Online (Sandbox Code Playgroud)
这只是读取X-Forwared-Proto标题,如果它等于https,则将HTTPS环境变量设置为1.PHP将看到这个环境变量,并最终将变为$_SERVER['HTTPS']等于1- 就像它对于"真正的"本机SSL请求一样.
zer*_*mpl 29
wordpress文档的另一个选项是将它添加到你的wp-config.php:
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
Run Code Online (Sandbox Code Playgroud)
Gal*_*mor 10
如果其他人正在寻找与此相当的Nginx,这就是你需要做的:
对于重写设置,您应该在server块下添加以下内容:
if ($http_x_forwarded_proto != 'https') {
rewrite ^ https://$host$request_uri? permanent;
}
Run Code Online (Sandbox Code Playgroud)
要设置HTTPS参数,您应该在location ~ \.php$块下添加以下内容:
if ($http_x_forwarded_proto = 'https') {
set $fe_https 'on';
}
fastcgi_param HTTPS $fe_https;
Run Code Online (Sandbox Code Playgroud)
fastcgi_param HTTPS如果你有任何其他命令(我在我的fastcgi_params文件中有它),请记得删除任何其他命令.
小智 7
在WordPress中使用ssl时,请使用此4步骤方法来消除重定向循环和混合内容问题。
1)在数据库中用“ //”替换“ http://”-这将创建图像和其他资产的所有相对URL
2)在wp-config中,定义通用wp_home和wp_siteurl变量。
define('WP_HOME','//'. $_SERVER['SERVER_NAME']);
define('WP_SITEURL','//'. $_SERVER['SERVER_NAME']);
Run Code Online (Sandbox Code Playgroud)
3)如果使用负载平衡器,请使用“ HTTP_X_FORWARDED_PROTO”服务器变量来确定所使用的协议。为此,请在wp-config中添加此行
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
Run Code Online (Sandbox Code Playgroud)
4)最后,在.htaccess中,如果您位于loadbalancer后面,请使用此行将所有流量重定向到https。
# http to https
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
Run Code Online (Sandbox Code Playgroud)
不幸的是,以上都没有为我解决混合内容错误。然而,什么工作是将协议添加到 wp-config.php 中的 WP_HOME && WP_SITEURL 变量,例如
define( 'WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
define( 'WP_SITEURL', WP_HOME );
之后,源中的所有 URL 都以 https 开头,所有混合内容错误都消失了。
| 归档时间: |
|
| 查看次数: |
24533 次 |
| 最近记录: |