干净的 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;
}
对我来说它很好用。