Wordpress 站点的 SSL 卸载到 Apache2

Wordpress 站点的 SSL 卸载到 Apache2

我有一个在 Google Compute Engine 实例上运行的 WordPress 网站,并且 SSL 曾经在 Apache 内部设置。

由于 SSL 和图像调整大小对该实例造成了很大压力,因此我设置了 Google Compute Engine 负载均衡器,在负载均衡器中设置了 SSL 并启用了 CDN。

在 Apache 端,我禁用了*:443配置并只留下*:80配置。负载均衡器现在接受端口 443 上的请求并指向端口 80 上的实例。

<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName  mysite.com
        ServerAlias www.mysite.com

        # Indexes + Directory Root.
        DirectoryIndex index.php index.html
        DocumentRoot /var/www/mysite/htdocs/

        # Logfiles
        ErrorLog  /var/www/mysite/logs/error.log
        CustomLog /var/www/mysite/logs/access.log combined
</VirtualHost>

这是可行的,但由于所有资源仍然通过 HTTP 加载,因此我现在在网站上收到混合内容错误。

我现在尝试启用 URL 重写,看看是否可以通过 https 返回所有内容:

<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName  mysite.com
        ServerAlias www.mysite.com

        # Indexes + Directory Root.
        DirectoryIndex index.php index.html
        DocumentRoot /var/www/mysite/htdocs/

        # Logfiles
        ErrorLog  /var/www/mysite/logs/error.log
        CustomLog /var/www/mysite/logs/access.log combined

        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent]
</VirtualHost>

一旦我启用 RewriteEngine 并按照上述方式重写 URL,我就会得到无数次重定向。

我对 Apache 有点生疏,因为过去 5 年我几乎只使用 NGINX,有什么关于如何让 WordPress 在此设置下正常工作的想法吗?

答案1

事实证明我的设置没有任何问题,在 WordPress 中添加以下行wp-config.php即可修复此问题

// force SSL
$_SERVER['HTTPS']='on';

或者如果您想同时运行 http 和 https:

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

显然删除 https 重定向:

#        RewriteEngine on
#        RewriteCond %{HTTPS} off
#        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent]

相关内容