Apache за Nginx по https (Apache behind https reverse proxy)
Имеем Apache+PHP, который находится за Nginx (обратный прокси), и на Nginx терминируется https. Без дополнительных приседаний Apache не будет знать, что запросы пришли по протоколу https, и, соответственно, PHP будет генерировать ссылки на http вместо https.
Есть два способа решения проблемы:
Модуль Apache setenvif
В настройках nginx:
proxy_set_header X-Forwarded-Proto $scheme;
В настройках apache:
LoadModule setenvif_module modules/mod_setenvif.so <IfModule setenvif_module> SetEnvIf X-Forwarded-Proto https HTTPS=on </IfModule>
Модуль rpaf
К сожалению, во всех дистрибутивах только старая версия этого модуля, которая не обладает нужным нам функционалом, по этому нужно ставить из исходников:
Установка в CentOS:
yum install httpd-devel gcc cd /usr/local/src wget https://github.com/gnif/mod_rpaf/archive/stable.zip unzip stable.zip cd mod_rpaf-stable make make install
Установка в Ubuntu:
apt-get install build-essential apache2-dev cd /usr/local/src wget https://github.com/gnif/mod_rpaf/archive/stable.zip unzip stable.zip cd mod_rpaf-stable make make install
Конфигурация:
LoadModule rpaf_module modules/mod_rpaf.so RPAF_Enable On RPAF_SetHostName On RPAF_ProxyIps 192.168.0.1 RPAF_SetHTTPS On
В настройках nginx:
proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme;
Enjoy!