Циклическая переадресация Wordpress при переходе на HTTPS

5 апреля 2018
Циклическая переадресация Wordpress при переходе на HTTPS

Был погожий теплый апрельский денёк. Я настраивал защищённое соединение на очередном клиентском Wordpress-сайте: заказал сертификат от Let's Encrypt, отредактировал конфиг Nginx, сменил настройки Адрес WordPress (URL) и Адрес сайта (URL):

Настройки HTTPS для Wordpress

Всё шло своим чередом, и ничего не предвещало беды :) Перезагружаю страницу, и тут бац!

Скриншот ошибки ERR_TOO_MANY_REDIRECTS

Что значит ошибка ERR_TOO_MANY_REDIRECTS?

Для тех, кто в школе учил немецкий, дословный перевод звучит примерно так: "ошбк_слишком_много_переадресаций". Это значит, что при загрузке страницы браузером сервер отвечает кодом переадресации (301,302 или 307), браузер пытается получить новую страницу, опять получает код редиректа, опять пытается получить и так далее по кругу до тех пор, пока у него не лопнет терпение и не выдаст ошибку.

Такая ситуация не зависит от конкретного браузера. И Chrome, и Яндекс браузер, и Firefox будут выдавать один и тот же код. Хотя сообщение может немного отличаться. Огнелис, например, советует удалить файлы cookie. Забегая вперёд скажу, что это сейчас не поможет :)

Как появилась циклическая переадресация на Wordpress?

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

Оказалось дело в том, что на сервере использовалась связка Nginx+Apache. Nginx принимал запрос и передавал его Apache по 81 порту. Соответственно, Apache был не в курсе, что используется какое-то защищённое соединение.

Ну а дальше срабатывал уже Wordpress, который судя по настройкам должен был перейти на HTTPS-версию, но не знал, что он уже на ней, т.к. об этом и не знал Apache.

Как исправить ERR_TOO_MANY_REDIRECTS для Wordpress+Nginx+Apache?

Да просто!

Добавить в .htaccess

SetEnv HTTPS "on"
SetEnv HTTP_X_FORWARDED_PROTO "https"

Теперь Apache всегда будет определять текущую версию сайта как https, и Wordpress не будет никуда переадресовывать.