Как отобразить реальный IP-адрес клиента в логах Apache 2.4, работающем за прокси в Nginx.
В продакшене используется связка Nginx + Apache, где Nginx выступает в роли прокси-сервера для Apache. Рассмотрим как передавать реальный IP-адрес клиента в Apache с прокси Nginx, для отображения правильной информации в логах Apache, в противном случае в логах Apache будет по каждому запросу будет значится адрес прокси-сервера Nginx.
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; ... }
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
[stextbox id=’warning’]ИНФОРМАЦИЯ. В случае если у вас проси-серве Nginx и Apache разнесены по разным серверам, то в параметре RemoteIPInternalProxy необходимо указать IP-адрес прокси-сервера.[/stextbox]
Активируем модуль 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
/etc/init.d/apache2 restart
Обсуждение
Нет комментариев.