Wordpress 托管在提供 SSL 的负载均衡器后面

Wordpress 托管在提供 SSL 的负载均衡器后面

干净的 Wordpress 网站位于 loadpalancer 代理后面,该代理为 wp.mydomain.com 提供通配符 SSL,但我没有参与其配置。WP 服务器基于 CentOS 7.1,安装了 Apache。我为域创建了简单的虚拟别名:

<VirtualHost *:80>
        ServerName wp.mysite.com
        DocumentRoot "/var/www/wp.mysite.com/public_html"
                <Directory "/var/www/wp.mysite.com/public_html">
Options Indexes FollowSymLinks
AllowOverride All
Order Deny,Allow
Allow from all
           </Directory>
DirectoryIndex index.php index.phtml index.html index.htm
        <IfModule mpm_peruser_module>
                ServerEnvironment apache apache
        </IfModule>
        ErrorLog /var/www/wp.mysite.com/error.log
        CustomLog /var/www/wp.mysite.com/access.log combined
</VirtualHost>

HTTP 版本的网站一切正常,但 HTTPS 版本却不行。我收到混合内容加载网站时出现问题。此外,我无法使用 WP admin,它让我陷入重定向循环问题。我已经将下一部分代码添加到 wp-config.php 中:

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

define('WP_HOME','https://wp.mysite.com');
define('WP_SITEURL','https://wp.mysite.com');

谢谢。

答案1

混合内容意味着当您通过 https 连接时,某些页面元素(例如图像或链接的 CSS 文件和字体)是使用 http 获取的 - 右键单击​​图像上的“检查元素”并查看 CSS 文件,对于重定向循环,您可以禁用 wp_config 文件中的 USE_SSL = true 为 FALSE。希望有所帮助。

答案2

为了解决某些具有 TLS 终止的负载均衡器后面的静态内容负载,您只需将下几行添加到wp-config.php文件:

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
   $_SERVER['HTTPS']='on';

您可以看到与您尝试的非常相似,但行为却相反。如果HTTP_X_FORWARDED_PROTO值不同,https则在 Wordpress 上手动激活 HTTPS,即使自动检测告诉我们流量是通过 http 进行的。

答案3

可能晚了,但也许对某些人有帮助,我发现自己遇到了同样的问题,一个 Wordpress 网站(没有 SSL)位于 GCP LB(带有 SSL)后面,经过一些测试后,我在顶部添加了以下几行index.php

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false){
   $_SERVER['HTTPS']='on';
   $_SERVER['REQUEST_SCHEME']='https';
   $_SERVER['SERVER_PORT']=443;
}

对我来说它很好用。

相关内容