У нас настроен веб-сервер следующим образом
Loadbalancer (HAPROXY) <---> Nginx <---> Серверы приложений
Чтобы Nginx знал о реальных клиентах, которые устанавливают соединения, я скомпилировал Nginx с HttpRealIpModule и внес изменения в конфигурацию. HAPROXY также настроен на пересылку заголовка XFF. Nginx работает по крайней мере частично (по моим наблюдениям), если клиент просматривает с публичного IP-адреса. В случае клиентов, которые имеют частный IP-адрес и находятся за другим прокси-сервером на стороне клиента, таким как SQUID, я получаю частный IP-адрес клиента, а не ОБЩЕСТВЕННЫЙ IP-адрес, с которого частный IP-адрес подвергается NATTED. Согласно документации модуля Nginx [ http://wiki.nginx.org/HttpRealIpModule ], HttpRealIpModule должен получать последний IP-адрес в заголовке X-Forwarded-For для замены. Вот дамп NGREP для клиента с частным IP за прокси-сервером squid
T 192.168.255.1:53777 -> 192.168.153.164:80 [AP]
.1315664739.21; __utmb=82961925.3.10.1315664739; __utmc=82961925; __utmz=82961925.1315664739.21.21.utmcsr=domainname.com|utmccn= (referral)|utmcmd=referral|utmcct=/users/sign_in; SnapABugHistory=206
#..If-None-Match: "cc1ff315751caad21aea3dfd5392a56a"..Via: 1.1 atmosphere.sprout.lan:3128 (squid/2.7.STABLE9)..X-Forwarded-For: 192.168.3.111..Cache-Control: max-age=259200..X-Forwarded-For: 116.90.235.11....
Заголовок XFF здесь atmospout.lan: 3128 (squid / 2.7.STABLE9) .. X-Forwarded-For: 192.168.3.111..Cache-Control: max-age = 259200..X-Forwarded-For: 116.90. 235.11.
Последний IP-адрес, показанный здесь в заголовке, - 116.90.235.11, но файл журнала nginx показывает частный IP-адрес клиента 192.168.2.111
это нормально ??
Это может произойти по ряду причин. Nginx - это в первую очередь прокси-сервер, поэтому он сохранит заголовки HTTP. Поэтому, если ваш HAproxy (или даже если прокси-сервер LAN пользователя) уже предоставляет X-Forwarded-For, у вас есть довольно хорошие шансы, что он будет сохранен через все прокси (HAproxy -> nginx -> backend).