我有一个在 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]