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

Nginx GeoIP: log_format и заголовки X-GeoIP для бекенда

Формат лога с полями country/city и прокидывание GeoIP в приложение через proxy_set_header X-GeoIP-*. Для связки nginx → httpd (Bitrix).

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

Использование переменных GeoIP в логах и передача страны/города в бекенд заголовками. Модуль ngx_http_geoip_module должен быть загружен и пути к базам заданы в http {}. Список переменных: документация ngx_http_geoip_module.

Формат лога с GeoIP

В блоке http {} задайте формат и подключите его к access_log:

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

    log_format main_geoip '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $body_bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         'country=$geoip_country_code country_name="$geoip_country_name" '
                         'city="$geoip_city" lat=$geoip_latitude lon=$geoip_longitude';

    server {
        listen 80;
        server_name example.com;

        access_log /var/log/nginx/access.log main_geoip;
        # ...
    }
}
  • Если в BitrixVM уже есть свой log_format, добавьте новый с другим именем (например, main_geoip) и используйте его только там, где нужно.

Заголовки для бекенда (nginx → Apache/PHP)

В location, где идёт proxy_pass на httpd или PHP-FPM, прокиньте переменные в заголовках:

location ~ \.php$ {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header X-GeoIP-Country      $geoip_country_code;
    proxy_set_header X-GeoIP-Country-Name  $geoip_country_name;
    proxy_set_header X-GeoIP-City         $geoip_city;
}
  • В PHP доступ: $_SERVER['HTTP_X_GEOIP_COUNTRY'], $_SERVER['HTTP_X_GEOIP_COUNTRY_NAME'], $_SERVER['HTTP_X_GEOIP_CITY'].

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