$http_x_forwarded_for

Переменная $http_x_forwarded_for содержит значение заголовка X-Forwarded-For из запроса клиента, которое указывает исходный IP-адрес клиента, выполняющего запрос. — NGINX Core (HTTP)

$http_x_forwarded_for NGINX Core (HTTP)

Описание

Переменная $http_x_forwarded_for в NGINX используется для извлечения значения HTTP-заголовка X-Forwarded-For, который обычно добавляют прокси в цепочке запросов, чтобы указать исходный IP-адрес клиента. Когда запрос проходит через один или несколько прокси, исходный IP клиента включается в этот заголовок, что позволяет принимающему серверу получить эту информацию. В нём может содержаться один IP-адрес или список IP, разделённых запятыми, которые представляют адрес клиента и любые последующие прокси, обрабатывавшие запрос. Обычно заголовок X-Forwarded-For имеет значение, похожее на: "203.0.113.195" — пример прямого IP, или "203.0.113.195, 198.51.100.0" — если в цепочке были прокси. При настройке NGINX эту переменную можно использовать в логах доступа, условных конфигурациях или проверках безопасности для разрешения или запрета доступа на основе исходного адреса клиента. Важно убедиться, что любая конфигурация корректно обрабатывает значения входящих заголовков, особенно если в цепочке запросов находится несколько прокси, чтобы избежать неправильного определения IP клиента. NGINX установит эту переменную только в том случае, если клиент отправил заголовок X-Forwarded-For. Она может быть особенно полезна в окружениях с балансировкой нагрузки, где нескольким бэкенд-серверам необходимо определить реальный IP клиента. Пользователям следует учитывать, что этот заголовок легко подделать, если не применены соответствующие меры безопасности, поэтому в сценариях, где безопасность важна, необходима валидация.

Пример конфига

http {
    log_format custom '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "http://$http_x_forwarded_for"';
    access_log /var/log/nginx/access.log custom;

    server {
        listen 80;
        server_name example.com;

        location / {
            # Use $http_x_forwarded_for for access control
            if ($http_x_forwarded_for ~* '203.0.113.195') {
                return 403;
            }
            proxy_pass http://backend_servers;
        }
    }
}

Подсистема

http

Кэшируется

Да

Контексты

http, server, location, if

Убедитесь, что заголовок X-Forwarded-For корректно устанавливается вашими прокси; в противном случае переменная может содержать непредвиденные значения.

Поскольку заголовок X-Forwarded-For легко подделать, реализуйте надлежащую проверку и доверяйте только известным прокси при использовании этого заголовка для принятия решений по безопасности.

Учтите, что в заголовке может содержаться несколько IP addresses; их разбор может оказаться сложным.