WordPress в HTTPS вызывает циклы перенаправления

Вопрос или проблема

Я настраиваю 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

  1. Обновите URL в настройках WordPress:
    Убедитесь, что в администраторской панели WordPress в разделе «Настройки» > «Общие» настройки WordPress Address (URL) и Site Address (URL) установлены на https://domain.com/subfolder/.

  2. Изменение 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';
  3. Настройка заголовков в Nginx:
    Убедитесь, что ваш сервер Nginx корректно обрабатывает заголовки. Добавьте следующие строки в вашу конфигурацию Nginx:

    location / {
       ...
       proxy_set_header X-Forwarded-Proto $scheme;
       ...
    }

    Это обеспечит передачу исходного протокола (HTTP или HTTPS) в заголовке X-Forwarded-Proto, что поможет WordPress корректно определить, должен ли он работать в режиме HTTPS.

  4. Обновление ключей безопасности:
    Иногда проблемы могут быть связаны с недействующими сессиями. Вам следует обновить Salt ключи в вашем wp-config.php. Замените существующий блок с ключами на новый, который можно сгенерировать по следующему адресу:

    Сгенерировать ключи

    Убедитесь, что вы удалили старый блок с define и заменили его новым.

  5. Проверка плагинов на конфликты:
    Если вы ранее отключали плагины, рекомендуется постепенно активировать их обратно, чтобы найти тот, который может вызывать проблемы с перенаправлением. Особенно обратите внимание на плагины, связанные с SEO или безопасностью.

  6. Очистка кэша:
    Если вы используете плагин кэширования, убедитесь, что кеш очищен после внесения изменений. Также, в случае использования кэша на уровне сервера (например, Varnish), убедитесь, что он сброшен.

  7. Тестирование конфигурации:
    После внесения изменений, протестируйте ваш сайт в нескольких браузерах или в режиме инкогнито, чтобы убедиться, что он загружается по HTTPS без перенаправления.

  8. Проверкасы о редиректе:
    Используйте инструменты для анализа перенаправлений, такие как Redirect Path, чтобы отследить, где именно происходит редирект.

Следуя этим рекомендациям, вы должны устранить проблему с циклом перенаправления и успешно настроить ваш сайт на HTTPS. Если проблема сохранится, возможно, стоит обратиться к более специфической поддержке WordPress или серверного хостинга.

Оцените материал
Добавить комментарий

Капча загружается...