Маленькая метка-заметка о проблеме переноса сайта на wordpress, которая возникла у меня сегодня.

Перенеся на https уже несколько сайтов, я успел набить руку, но сегодня я столкнулся с проблемой при переносе сайта на wordpress. Хоть перед переносом я и почитал пару статей и даже посмотрел пару видеороликов о возможных проблемах, но интернет не готовил меня к тому, что после получения сертификата, установки его на NGINX, изменения путей в админке и базе WP я увижу прекрасную циклическую перезагрузку главной страницы сайта. При этом я не мог зайти и в админку сайта и "почему-то" в исходном коде страницы авторизации wordpress я продолжал видеть кучу путей http://, а не https:// и вели они на стандартные файлы wordpres, т.е. это была не проблема моей темы или какого-либо плагина.

Вместо загрузки главной страницы сайта wordpress я видел ошибку:

ERR_TOO_MANY_REDIRECTS

Немного погуглив я осознал, что проблема оказалась в том, что у меня помимо nginx и php на сервере крутится ещё и apache, а wordpress, в свою очередь проверяет возможность работы по https протоколу через наличие переменной $_SERVER['HTTPS'], которая оказалась пустой в моем случае.

В этих ваших интернетах рекомендовали прописать в самое начало файла(на следующую строку после<?php ) wp-config.php следующую строку:

 $_SERVER['HTTPS'] = 'on'; 

Вписал, проверил и: о, чудо! Заработало!


Но я решил, что это очередной костыль, которым пользоваться я не желаю, и проблемы в настройке web-server'a, который к счастью был моим и изменения конфигурации я мог вносить как пожелаю.

В итоге я наше решение, которое на первый взгляд не каждому приходит на ум в первые пять секунд мышления ))

Я удалил $_SERVER['HTTPS'] = 'on'; из wp-config.php, ведь это не более, чем костыль.

После чего в конфигурационный файл вашего сайта в nginx нужно внести следующую строку (если она отсутствует).

sudo nano /etc/nginx/sites-available/YourDomain.ru
YourDomain.ru - домен вашего сайта или его конфигурационный файл

В секцию servers -> loaction /


proxy_set_header X-Forwarded-Proto $scheme;

После чего он стал выглядеть примерно следующим образом:


location /
{
proxy_pass http://127.0.0.1:8080/;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;

}
}

После чего нужно не забыть перезагрузить nginx:

sudo service nginx restart

Далее я полез в консоль сервера и включил модуль setenvif:

sudo a2enmod setenvif

Но простого включения этого модуля в нашем случае оказалось недостаточно, пришлось ещё отредактировать файл: /etc/apache2/mods-enabled/setenvif.conf


sudo nano /etc/apache2/mods-enabled/setenvif.conf

После чего нужно вписать в него (я вписал в самое начало файла) следующие строки:

<IfModule setenvif_module>
    SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>

Можно же вписать и иначе:

После 
<IfModule mod_setenvif.c>
Вписываем
        SetEnvIf X-Forwarded-Proto https HTTPS=on

Сохранил изменения и перезагрузил веб-сервер apache2 командой:

sudo service apache2 restart

Всё. Проблема переноса wordpress на https, которая возникала из-за того, что в связке Nginx + Apache в переменной $_SERVER в PHP отсутствует параметр HTTPS, а переменная SERVER_PORT равна 80.