У меня есть 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.aIP вместоb.b.b.b - WEBAPP получает следующие заголовки:
X-Forwarded-For=a.a.a.a, a.a.a.aX-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.
Кто-нибудь может помочь мне решить эту проблему?