Как именно настроить связку Nginx + Apache + PHP написано уже огромное количество статей. Моя же статья-заметка затрагивает одну небольшой, но довольно важный вопрос. Дело в том, что если нужно настроить сайт, который работает по протоколу HTTPS, то и статика (картинки, JS скрипты, CSS и т.д.) должны отдаваться через HTTPS. Это значит, что отдавать их должен Nginx. А это условие в свою очередь является причиной того, что виртуальные хосты сайта или сайтов должны быть прописаны в Nginx.
Так как протокол Nginx будет обслуживать протокол HTTPS, то Apache и PHP не будут знать, что сайт работает по https://
Когда виртуальный хост настроен через Apache, то в глобальной переменной $_SERVER будет существовать переменная $_SERVER[‘HTTPS’] равная ‘on’.
Именно по наличию этого параметра некоторые скрипты «узнают», что сайт работает по защищенному протоколу.
Для начала в область server {} в настройках виртуального хоста в Nginx нужно добавить
server { ... location / { ... proxy_set_header X-Forwarded-Proto $scheme; ... } ... } |
А затем, чтобы Apache узнал и передал PHP, что сайт работает по HTTPS в глобальный конфиг апача или в настройку виртуального хоста в апаче нужно добавить одну строку «SetEnvIf X-Forwarded-Proto https HTTPS=on»
<VirtualHost 127.0.0.1:8080> ServerName www.blabla.ru ... SetEnvIf X-Forwarded-Proto https HTTPS=on ... </VirtualHost> |
Чтобы это условие работало, у Apache должен быть установлен и включен модуль setenvif