В моей среде запросы пользователей проходят через несколько систем:
[Клиент] -> [ELB] ---> [nginx] -> [Интернет]
(ELB = AWS Elastic Load Balancer)
Благодаря этому ответ, У меня nginx определяет и передает правильный IP-адрес клиента вышестоящим серверам (в Интернете) с X-Forwarded-For
и X-Real_IP
заголовки. Соответствующий конфиг nginx:
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
real_ip_recursive on;
proxy_set_header X-Real-IP $remote_addr;
Моя проблема в том, что модуль Real IP в nginx заменяет существующий $remote_addr
переменная с результатом ее X-Forwarded-For
расчеты. Это дает мне исходный IP-адрес клиента, но я теряю IP-адрес системы, которая фактически отправила запрос прокси-серверу (т.е. ELB).
В целом, для меня важнее иметь IP-адрес клиента, но я хотел бы иметь возможность регистрировать всю цепочку запросов, чтобы понимать (и отлаживать), как проходит трафик. В настоящее время у меня может быть только nginx для записи IP-адреса клиента, его собственного IP-адреса и IP-адреса вышестоящего сервера. Я также хотел бы иметь возможность регистрировать IP-адрес ELB.
я вижу X-Istence спросил то же самое вопрос в 2013 году не повезло. Что-нибудь изменилось или улучшилось с тех пор?
Вы можете получить исходный адрес клиента подключающегося ELB в переменная $realip_remote_addr
, но имейте в виду, что эта переменная была добавлена только в nginx 1.9.7, поэтому вам потребуется использовать самую последнюю версию nginx.