Вопрос или проблема
Я настраиваю WordPress на HTTPS, который размещен на VPS Digital Ocean и управляется Serverpilot (хотя HTTPS настроен вручную, а не через Serverpilot). На сервере находится несколько установок WordPress, но одна из них меня особенно интересует с точки зрения безопасности. WordPress сам по себе работает в подпапке (то есть расположен по адресу domain.com/subfolder/).
Мне удалось запустить SSL-сертификат, так как переход на основной URL сайта domain.com и размещение обычного HTML-файла делают его работоспособным через SSL, и значок замка отображается.
Однако установка WordPress попадает в цикл перенаправления.
Я сделал следующее:
-
Выключил все плагины
-
Переключился на стандартную тему (Twenty Thirteen)
-
Обновил все до последних версий
-
Изменил на стандартные постоянные ссылки
Затем я изменил siteurl и WordPress URL на https, после чего сайт попадает в цикл перенаправления. Я использую плагин Redirect Path для Chrome, и он фактически перенаправляет на себя (то есть https://domain.com/subfolder/ ведет на https://domain.com/subfolder/). Странно, но это перенаправление, похоже, переключается между 301 и 302, без видимой причины.
Я также немного поэкспериментировал с WordPress HTTPS, но и это не увенчалось успехом.
Есть идеи? Не совсем понимаю, что делать дальше…
Ответ на это пришел частично из этого ответа, который ссылался на Codex и рекомендовал следующий фрагмент кода поместить в верхнюю часть файла wp-config:
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
К сожалению, это не совсем решило проблему, но я заметил, что это срабатывало, если я удалял if
и просто всегда устанавливал $_SERVER['HTTPS']='on';
. Если вы хотите всегда принудительно использовать SSL на своем сайте, это должно сработать.
Если вы хотите разрешить использовать и http, и https, вам нужно будет отредактировать конфигурацию nginx. Добавьте следующую строку:
proxy_set_header X-Forwarded-Proto $scheme;
Это заголовок, который условие if
выше ищет. Настраивая nginx на передачу запрашиваемой схемы (либо http, либо https) в качестве X-Forwarded-Proto
, вы позволяете WordPress видеть, какая схема была первоначально, чтобы он знал, как себя вести.
После этого ваш сайт WP должен правильно работать как по http, так и по https.
Мне пришлось добавить $_SERVER['REQUEST_SCHEME']='https';
вместе с $_SERVER['HTTPS']='on';
, чтобы это сработало. Спасибо.
Попробуйте регенерировать соли-коды.
Отредактируйте wp-config.php
и найдите блок, подобный этому, с другими кодами, конечно.
define( 'AUTH_KEY', 'r8m9;w=^7;sr527-pKUo%8S.ZZd[83fF9s<A!8>T=Bxuh`Ao2 zjvK9-;mjJ5$J(' );
define( 'SECURE_AUTH_KEY', '25SY0[<xSY;P7o*eE62/PE3qZ^]jC(_dlD,Yw[+M}qiqlZm@-&x:e ]2uBoN4KoX' );
define( 'LOGGED_IN_KEY', '( [H.nR@G>H%$C7HiNJ/n?Dm>o}+#`18-:NH_}~KpjU[,6snKyYpXAQT7_wsG0Jm' );
define( 'NONCE_KEY', ',-_2hQv][~`.5v<1:)GofWH|:a*|9t>;5BC1L~b(|2ms<:KmWi:m `qxpSr#}tI%' );
define( 'AUTH_SALT', '2]kSYo2^/g$c;SoVeKjQvfhH|pvxZJ:3@&<N%_A[o<eJmv?|eg9j}3@6b&3R& 3@' );
define( 'SECURE_AUTH_SALT', 'p||=*m,Mg-A!2FW#A=bIvfk&QRo4){Rl2u?N}Hv$~$Hv_la|DOPkpltjcPsEkVp}' );
define( 'LOGGED_IN_SALT', '/n)zKVOVb!,}E5Zg,s ``psS[J/Q`vzE[tvh7}f1=&E[*C-0rG@:MU}n,CLH9OfV' );
define( 'NONCE_SALT', '#?TKo)W9+(o13JMoM^c5OvD*xR41q2]P~FD&i(nu;Y;OF{3A>VPnzvRb-Hs*zNc0' );
Перейдите на этот сайт https://api.wordpress.org/secret-key/1.1/salt/
Удалите старый блок определений в вашем wp-config.php
и скопируйте блок определений с предыдущего сайта в ваш wp-config.php
.
Попробуйте войти в вашу админ панель.
Ответ или решение
При настройке WordPress на HTTPS, особенно на сервере Digital Ocean с использованием ServerPilot, возникновение циклов перенаправления может быть довольно распространенной проблемой. Вот комплексный подход к решению этой проблемы, который может помочь вам наладить работу вашего сайта.
Шаги для предотвращения циклов перенаправления на HTTPS
-
Обновите URL в настройках WordPress:
Убедитесь, что в администраторской панели WordPress в разделе «Настройки» > «Общие» настройкиWordPress Address (URL)
иSite Address (URL)
установлены наhttps://domain.com/subfolder/
. -
Изменение
wp-config.php
:
Для обеспечения правильной работы HTTPS в конфигурации вашего WordPress сайта, добавьте следующий код в верхнюю часть файлаwp-config.php
:if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) { $_SERVER['HTTPS'] = 'on'; } // Если вы хотите всегда принудительно использовать HTTPS: // $_SERVER['HTTPS'] = 'on'; // Если хотите поддерживать и HTTP, и HTTPS, добавьте следующее в конфигурацию Nginx: // proxy_set_header X-Forwarded-Proto $scheme;
Если предыдущая проверка не работает, попробуйте установить:
$_SERVER['HTTPS'] = 'on';
-
Настройка заголовков в Nginx:
Убедитесь, что ваш сервер Nginx корректно обрабатывает заголовки. Добавьте следующие строки в вашу конфигурацию Nginx:location / { ... proxy_set_header X-Forwarded-Proto $scheme; ... }
Это обеспечит передачу исходного протокола (HTTP или HTTPS) в заголовке
X-Forwarded-Proto
, что поможет WordPress корректно определить, должен ли он работать в режиме HTTPS. -
Обновление ключей безопасности:
Иногда проблемы могут быть связаны с недействующими сессиями. Вам следует обновить Salt ключи в вашемwp-config.php
. Замените существующий блок с ключами на новый, который можно сгенерировать по следующему адресу:Убедитесь, что вы удалили старый блок с
define
и заменили его новым. -
Проверка плагинов на конфликты:
Если вы ранее отключали плагины, рекомендуется постепенно активировать их обратно, чтобы найти тот, который может вызывать проблемы с перенаправлением. Особенно обратите внимание на плагины, связанные с SEO или безопасностью. -
Очистка кэша:
Если вы используете плагин кэширования, убедитесь, что кеш очищен после внесения изменений. Также, в случае использования кэша на уровне сервера (например, Varnish), убедитесь, что он сброшен. -
Тестирование конфигурации:
После внесения изменений, протестируйте ваш сайт в нескольких браузерах или в режиме инкогнито, чтобы убедиться, что он загружается по HTTPS без перенаправления. -
Проверкасы о редиректе:
Используйте инструменты для анализа перенаправлений, такие как Redirect Path, чтобы отследить, где именно происходит редирект.
Следуя этим рекомендациям, вы должны устранить проблему с циклом перенаправления и успешно настроить ваш сайт на HTTPS. Если проблема сохранится, возможно, стоит обратиться к более специфической поддержке WordPress или серверного хостинга.