У меня есть сайт WordPress, работающий на экземпляре Google Compute Engine, и SSL используется для настройки внутри Apache.
Поскольку SSL и изменение размера изображения создавали большую нагрузку на этот экземпляр, я установил балансировщик нагрузки Google Compute Engine, установил SSL в балансировщике нагрузки и включил CDN.
На стороне Apache я отключил *:443
config и оставил только *:80
config. Load Balancer теперь принимает запрос на порт 443 и указывает на экземпляр на порту 80.
<VirtualHost *:80>
ServerAdmin info@mysite.com
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 info@mysite.com
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, поскольку я использую NGINX почти исключительно в течение последних 5 лет. Есть ли идеи о том, как заставить WordPress правильно работать в этой настройке?
Оказывается, в моей настройке нет ничего плохого, добавив в 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]