X-Forwarded-Proto в Nginx

X-Forwarded-Proto — переменная окружения, которая задействует когда применяется веб-сервер с проксированием. Обычно Nginx и Apache. Без X-Forwarded-Proto (или переменной окружения HTTPS) сайт с такой конфигурацией часто не будет работать по https.

 

X-Forwarded-Proto и включение переменной в Nginx

Вопрос с переменной может возникнуть если используется проксирование и сайт должен работает с SSL сертификатом.

При совместном использовании Nginx + Apache значение имеют переменные окружения.

 

В переменной $_SERVER по умолчанию отсутствует параметр HTTPS и сайт с сертификатом будет отображаться неверно — с «поехавшей» версткой.

 

 

Исправить ситуацию можно скорректировав настройки Nginx

Для этого в конфигурационный файл виртуального хоста Nginx требуется добавить такую директиву:

 

mcedit /etc/nginx/sites-enabled/SITENAME.conf

proxy_set_header X-Forwarded-Proto $scheme;

 

Затем перезапустить веб-сервер

nginx -s reload

Часто все настройки хэдеров проксирования proxy_set_header выносятся в отдельный файл, который подключается в виртуальном хосте.

 

В Apache следует подключить модуль setenvif. Также в виртуальном хосте

 

mcedit /etc/apache/sites-enabled/SITENAME

LoadModule setenvif_module modules/mod_setenvif.so

SetEnvIf X-Forwarded-Proto https HTTPS=on

 

service apache2 reload

 

Переменную окружения теперь можно использовать.

 

Последний шаг можно пропустить, но тогда в каком-либо скрипте сайта потребуется дополнительно указывать переменную

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

 

Это можно делать в файле, в котором задаются реквизиты подключения к базе данных.

Описанные настройки часто помогают справиться с проблемой незащищенного соединения для части элементов на странице. Подобные предупреждения могут выдаваться браузером после подключения SSL сертификата.

 

Читайте про подключение SSL для Nginx.