NGINX: реальный IP в логах при работе за AWS Load Balancer

Автор: | 09/07/2018
 

Есть NGINX, который работает за AWS Application Load Balancer-ом (ALB).

Проблема заключается в том, что в логах NGINX пишется IP самого ALB, а не клиента:

10.0.2.26 – – [06/Jul/2018:10:30:50 +0300] “GET /debug/ HTTP/1.1” 404 133 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36”

Что бы исправить это – добавляем в конфиг nginx.conf, блок http {} (или в server {} конфига вируталхоста):

...
    real_ip_header X-Forwarded-For;
    set_real_ip_from 10.0.2.0/24;
...

Тут:

  • real_ip_header – указываем заголовок, из которого будем получать информацию о реальном клиенте
  • X-Forwarded-For – заловок, в котором ALB сохраняет информацию об IP клиента, с которого пришёл запрос
  • set_real_ip_from – задаём сеть, заголовкам из которой мы доверяем
  • 10.0.2.0/24 – сеть Application Load Balancer-а

Перечитываем конфиги:

[simterm]

root@bm-backed-app-dev:/etc/nginx/conf.d# nginx -t && service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[/simterm]

Проверяем curl-ом:

[simterm]

$ curl -sI https://dev.example.com/
HTTP/2 200

[/simterm]

Проверяем лог:

194.***.***.26 – – [06/Jul/2018:10:55:50 +0300] “HEAD / HTTP/1.1” 200 0 “-” “curl/7.60.0”

Готово.