Был погожий теплый апрельский денёк. Я настраивал защищённое соединение на очередном клиентском Wordpress-сайте: заказал сертификат от Let's Encrypt, отредактировал конфиг Nginx, сменил настройки Адрес WordPress (URL)
и Адрес сайта (URL)
:
Всё шло своим чередом, и ничего не предвещало беды :) Перезагружаю страницу, и тут бац!
Что значит ошибка 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 не будет никуда переадресовывать.