Сниппеты
Назад к сниппетам

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

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

nginx
16 февраля 2026 г.

Когда 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: переменные для логов и заголовков.

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