Отображение реального 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 nginxApache
В 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>
EOFRemoteIPInternalProxy необходимо указать 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ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
 
						 
                     
                     
                    
Обсуждение
Нет комментариев.