Блог/HTTPS соединение в MODX Revolution

Настройка HTTPS соединения в MODX Revolution

Автор: Кудашев Сергей

Не так давно начал переводить сайты, в том числе и на MODX Revolution, на работу с HTTPS протоколом. Сейчас, с моей точки зрения, самое время. Надо было сразу написать инструкцию по переводу сайтов на HTTPS протокол, но подобных постов и так много, поэтому решил не плодить контент. Пока руки не дошли до перевода на HTTPS сайтов на sweb.

Думаю, стоит начать с самой процедуры перевода сайтов на защищенное соединение, после чего коснусь тех проблем, с которыми столкнулся на sweb. Сначала нам надо получить сертификаты, я их генерирую через zerossl.com, который в свою очередь генерирует их через Let’s Encrypt. У данного способа нет никаких особых преимуществ, единственное все можно сделать онлайн. Получив сертификаты привязываем к нужному нам домену, в случае с sweb это делается через загрузку сертификатов в административную панель хостинга во вкладке SSL.

Дальше для перевода самого MODX Revolution на защищенное HTTPS соединение необходимо включить две системные настройки: В разделе System and Server (Система и Сервер) параметру server_protocol необходимо задать значение https, тем самым мы сообщим системе управления, что мы хотим использовать HTTPS в качестве основного протокола на сервере. В разделе Site (Сайт) параметру link_tag_scheme необходимо присвоить значение 1, вместо значения -1, тем самым мы указываем MODX, что все ссылки необходимо генерировать с указанием схемы https (то есть использовать https:// в начале формы записи URL). После этого достаточно вручную очистить файловый кеш и наш сайт на MODX Revolution начнет корректно обрабатывать https:// обращения.

Но для sweb хостинга это оказалось не совсем так. На нем MODX категорически отказывался определять HTTPS подключение. Причина оказалась в том, что для определения защищенного подключения MODX использует серверную переменную $_SERVER['HTTPS'] (кому интересно, процедура проверки находится в файле config.php). Однако в случае с sweb данная переменная сервера отсутствовала как класс и вместо нее присутствовала переменная $_SERVER['HTTP_HTTPS']. Как я понял, это связано с некоторыми особенностями настройки связки Apache+nginx, но проверить не смог, так как хостинг шаред. В общем решение данной проблемы в итоге нашлось, через объявление переменной HTTPS в .htaccess, при условии, что она может быть инициализирована. Данное решение подходит нам идеально, так как не надо менять код самой CMS.

Итак, вначале .htaccess нам необходимо добавить:

SetEnvIf HTTPS on HTTPS=on

Все, после этого мы получаем работающее HTTPS соединение на хостинге компании sweb.

UPDATE: если вы столкнулись с проблемой, что в .htaccess не работает дефолтная конструкция, которая переводит все подключения к серверу на защищенное соединение:

RewriteCond %{SERVER_PORT} !^443
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

, то замените ее на следующую:

RewriteCond %{ENV:HTTPS} !on [NC]
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

Комментарии (0)