NGINX
#nginx#geoip#geoip_proxy#X-Forwarded-For#cloudflare#load-balancer

Nginx GeoIP: geoip_proxy при работе за прокси или балансировщиком

Настройка geoip_proxy и geoip_proxy_recursive, чтобы GeoIP смотрел на реальный IP клиента из X-Forwarded-For, а не на IP прокси.

Как использовать

  1. Узнать подсеть прокси/балансировщика (например, Cloudflare или внутренний ELB).
  2. В http {} добавить geoip_proxy с этой подсетью и включить geoip_proxy_recursive on.
  3. Перезагрузить конфиг: nginx -t && systemctl reload nginx.

Когда Nginx стоит за прокси (Cloudflare, балансировщик, другой reverse proxy), переменные GeoIP по умолчанию берутся от IP соединения — то есть от прокси. Чтобы использовать IP клиента из заголовка X-Forwarded-For, нужны директивы geoip_proxy и geoip_proxy_recursive. Описание: ngx_http_geoip_module.

Базовая настройка в http {}

Укажите подсеть доверенного прокси и включите рекурсивный разбор X-Forwarded-For:

http {
    geoip_country /etc/nginx/geoip/GeoIP.dat;
    geoip_city    /etc/nginx/geoip/GeoLiteCity.dat;

    # Подсеть прокси/балансировщика — подставьте свою
    geoip_proxy 10.0.0.0/8;
    geoip_proxy_recursive on;

    # ...
}
  • geoip_proxy — один или несколько адресов/подсетей; для запросов с такого IP Nginx будет брать клиентский адрес из X-Forwarded-For.
  • geoip_proxy_recursive on — перебор цепочки в X-Forwarded-For до первого «недоверенного» IP (обычно это IP клиента).

Пример для нескольких подсетей

http {
    geoip_proxy 172.16.0.0/12;
    geoip_proxy 192.168.1.0/24;
    geoip_proxy_recursive on;
    # ...
}

Диапазоны замените на реальные подсети вашего прокси или балансировщика. После правок: nginx -t, затем systemctl reload nginx.

Подробнее: Как включить GeoIP в Nginx: переменные для логов и заголовков.