Nginx GeoIP: log_format и заголовки X-GeoIP для бекенда
Формат лога с полями country/city и прокидывание GeoIP в приложение через proxy_set_header X-GeoIP-*. Для связки nginx → httpd (Bitrix).
Как использовать
- В http {} добавить log_format main_geoip и в нужном server/location — access_log с этим форматом.
- В location с proxy_pass к Apache/PHP добавить proxy_set_header X-GeoIP-*.
- В PHP читать из $_SERVER['HTTP_X_GEOIP_COUNTRY'] и т.д.
Использование переменных 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: переменные для логов и заголовков.