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

Автор: | 07/09/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-а

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

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

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

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

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

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

Готово.