У меня есть webapp под NGinx и другим лобовым балансиром нагрузки, что-то вроде ниже (x.x.x.x = IP-адрес):
Клиент (a.a.a.a) → LB (b.b.b.b) → NGX (c.c.c.c) → WEBAPP (d.d.d.d)
Вот фрагмент моей конфигурации NGinx:
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
real_ip_header X-Forwarded-For;
set_real_ip_from b.b.b.b;
real_ip_recursive on;
}
- Балансировщик нагрузки добавляет поле
X-Forwarded-For
с клиентом IPX-Forwarded-For
=a.a.a.a
- NGinx ищет реальный IP-адрес клиента в заголовке
X-Forwarded-For
, опустив LB IP (b.b.b.b
) и изменив$remote_addr
сb.b.b.b
наa.a.a.a
, поэтомуproxy_set_header X-Real-IP $remote_addr
станет true (OK, что я хочу!)
НО, NGinx также завершает заголовокX-Forwarded-For
сa.a.a.a
IP вместоb.b.b.b
- WEBAPP получает следующие заголовки:
X-Forwarded-For
=a.a.a.a, a.a.a.a
X-Real-IP
=a.a.a.a
- >X-Forwarded-For
должно бытьa.a.a.a, b.b.b.b
Мне нужна возможность установки первого proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
, а затем поиск реального IP и замена значения $remote_addr
.
Кто-нибудь может помочь мне решить эту проблему?