SCROLL
Среднее время на прочтение: 2 мин.

Отображение реального 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
В случае если у вас проси-серве Nginx и Apache разнесены по разным серверам, то в параметре RemoteIPInternalProxy необходимо указать IP-адрес прокси-сервера.

Активируем модуль mod_remoteip и созданную конфигурацию:

a2enmod remoteip
a2enconf remoteip

Для того чтобы в логах Apache отображались передаваемые IP-адреса клиентов, необходимо поправить формат логов. В файле /etc/apache2/apache2.conf, приводим к виду параметры:

/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
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.