В моей среде есть запросы пользователей проходит через ряд систем:
[Клиент] -> [ELB] ---> [nginx] -> [web]
(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.