Использование NginX за балансировщиком нагрузки и правильные ip адреса в логах

Если у Вас на сервере установлен Varnish + NginX, то в логах NginX все посетители будут с одним ip адресом - 127.0.0.1. Есть два варианта:

  1. Изменить формат ведения логов
  2. Заставить NginX сразу обрабатывать правильный ip адрес

Для начала нужно заставить Varnish отправлять этот ip адрес бэкэнду. Для этого добавьте следующие строки в секцию vcl_recv:

if (req.restarts == 0) {
  if (req.http.x-forwarded-for) {
    set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
  } else {
    set req.http.X-Forwarded-For = client.ip;
  }
}

На самом деле можно ограничиться только:

set req.http.X-Forwarded-For = client.ip;

Теперь удостовертесь, что realip включен в вашем NginX:

nginx -V 2>&1 |grep realip

Если все ОК, добавьте следующие строки в файл настройки NginX (/etc/nginx/nginx.conf) в секцию http:

set_real_ip_from   127.0.0.1;
real_ip_header      X-Forwarded-For;

Проверяем конфиг:

nginx -t

Перезапускаем Varnish и NginX:

/etc/init.d/varnish restart && /etc/init.d/nginx restart

Читаем логи.

Categories:

Updated: