Модуль stream_realip_module в Nginx предназначен для восстановления исходного IP-адреса клиента в случаях, когда запросы проходят через промежуточные прокси-серверы или балансировщики нагрузки. Это особенно полезно, когда сам сервер Nginx выступает в роли обратного прокси или работает за другим уровнем защиты (например, Cloudflare).
Рассмотрим подробнее назначение и принцип работы этого модуля:
Назначение
Nginx поддерживает обработку потоков TCP и UDP с использованием Stream модуля. Если трафик проходит через обратный прокси или балансировщик нагрузки, заголовок реального IP-адреса клиента может потеряться, поскольку сервер видит IP адрес прокси, а не оригинального клиента. Модуль stream_realip_module помогает восстановить реальный IP-адрес отправителя пакета.
Принцип работы
Работа модуля основана на обработке специальных HTTP-заголовков или расширенных полей протоколов, таких как:
Для HTTP-запросов часто используют заголовок X-Forwarded-For, куда помещают оригинальный IP клиента.
В случае TCP-протокола или других ситуаций (например, работа с DNS поверх TLS), используются специальные расширения, например, PROXY протокол.
Конкретнее:
Когда клиент подключается к вашему сайту через стороннего прокси, этот прокси добавляет специальный заголовок (или расширение протокола), содержащий истинный IP-адрес клиента.
Затем модуль stream_realip_module интерпретирует этот заголовок и заменяет показанный в соединении IP прокси на реальный IP клиента.
Это позволяет серверу правильно вести статистику трафика, защищать себя от атак и обеспечивать правильную работу функций аутентификации и мониторинга.
Настройка
Код настройки для восстановления реального IP адреса выглядит примерно следующим образом:
stream {
map $proxy_protocol_addr $real_ip {
default $remote_addr;
~^(.*)$ $1;
}
server {
listen 80 proxy_protocol;
proxy_pass backend_server;
# Восстанавливаем реальный IP адрес клиента
set_real_ip_from 0.0.0.0/0; # Или диапазон доверенных прокси
real_ip_header Proxy-Protocol;
}
}
Заключение
Использование модуля stream_realip_module важно для всех сервисов, работающих за обратными прокси или балансировщиками нагрузки, позволяя видеть правильный IP-адрес клиентов и корректно обрабатывать запросы даже при многослойной инфраструктуре сети.