Отображение реального IP-адреса для Apache за обратным прокси-сервером Nginx.
В продуктиве используется связка Nginx + Apache, где Nginx выступает в роли прокси-сервера для Apache. Рассмотрим как передавать реальный IP-адрес для Apache за обратным прокси-сервером Nginx.
По умолчанию при такой связке, отображение IP-адреса в логах Apache будет значится адрес прокси-сервера Nginx. Что накладывает сложности при анализе логов веб-сервера Apache.
Nginx
В файле конфигурации виртуального хоста в секцию location
необходимо добавить следующие параметры:
location / {
...
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}
Описание используемых директив:
proxy_set_header Host $host;
— Передает оригинальный заголовокHost
, чтобы проксируемый сервер знал, какой хост был запрошен клиентом.proxy_set_header X-Real-IP $remote_addr;
— Передает реальный IP-адрес клиента, чтобы конечный сервер знал, откуда пришел запрос.proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
— Передает цепочку IP-адресов всех прокси, через которые прошел запрос, включая реальный IP клиента.
После правки конфигурационных файлов перезапускаем Nginx. Лучше проверить конфигурацию перед перезагрузкой Nginx:
nginx -t
systemctl reload nginx
Apache
В Apache 2.4 входит модуль mod_remoteip
, который может перезаписывать удаленный IP-адрес. Настроим его чтобы он принимал проброс IP-адреса с прокси-сервера Nginx.
Создаем конфигурацию для модуля mod_remoteip
. Выполняем команду:
cat << EOF > /etc/apache2/conf-available/remoteip.conf
<IfModule remoteip_module>
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1
RemoteIPInternalProxy 127.0.0.1
</IfModule>
EOF
RemoteIPInternalProxy
необходимо указать IP-адрес прокси-сервера.Активируем модуль mod_remoteip
и созданную конфигурацию:
a2enmod remoteip
a2enconf remoteip
Для того чтобы в логах Apache отображались передаваемые IP-адреса клиентов, необходимо поправить формат логов. В файле /etc/apache2/apache2.conf
, приводим к виду параметры:
LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
Для применения изменений, перезагружаем службу apache:
systemctl reload apache2
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.