Реальный IP- адрес клиента при двойном проксировании NGINX


Вдруг так случилось и появилась необходимость организовать цепочку NGIXN -> NGINX ->APACHE, например если первый Nginx выступает как балансировщик нагрузки. При данной цепочке теряется реальный IP адрес пользователя. А если вы используете GEOIP то он вам нужен.

Есть простое решение используя дополнительную переменную:

Пример конфигурации первого NGINX в цепочке:

location / {
     proxy_pass http://IP:80; #IP-адрес:порт где стоит второй nginx
     proxy_set_header Host $http_host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header realip $remote_addr; # сохраним IP посетителя в переменную
}

Пример конфигурации второго NGINX:

location / {
     proxy_pass http://127.0.0.1:81; #IP-адрес:порт с apache
     proxy_set_header Host $http_host;
     proxy_set_header X-Real-IP $http_realip;
     proxy_set_header X-Forwarded-For $http_realip;
     proxy_set_header realip ''; # удалим переменную
}
#nginx

Copyright © 2019