Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PROXY_REAL_IP_MISMATCH Linux / DevOps

Настройка Reverse Proxy в Nginx: заголовки X-Real-IP, X-Forwarded-For и real_ip

Обновлено: 21.08.2026
  • Бэкенд (Node.js, PHP-FPM, Python/Django) видит IP-адрес самого балансировщика (127.0.0.1 или внутренний адрес шлюза) вместо реального IP клиента.
  • Сбои в работе rate-limit, географических блокировок и систем аудита безопасности на бэкенде.
  • Заголовок X-Forwarded-For содержит цепочку некорректных или поддельных (spoofed) адресов.

1. Базовая конфигурация proxy_set_header

Добавьте директивы проброса оригинальных заголовков в блок location:

location / {
    proxy_pass http://backend_upstream;
    proxy_http_version 1.1;
    
    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-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
}

2. Восстановление реального IP через ngx_http_realip_module

Если Nginx сам находится за Cloudflare или AWS ALB, настройте доверенные прокси-сети в /etc/nginx/conf.d/real_ip.conf:

# Доверенные подсети прокси (например, Cloudflare)
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 10.0.0.0/8;

# Чтение IP из доверенного заголовка
real_ip_header X-Forwarded-For;
real_ip_recursive on;

3. Валидация и перезагрузка

nginx -t && systemctl reload nginx
💡 Практика специалистов: Никогда не доверяйте заголовку X-Forwarded-For вслепую без директивы set_real_ip_from. Злоумышленник может отправить поддельный заголовок X-Forwarded-For: 1.1.1.1 и обойти IP-аутентификацию вашего сервиса.

Частые вопросы (FAQ)

В чем разница между $remote_addr и $proxy_add_x_forwarded_for?

$remote_addr содержит IP-адрес непосредственного TCP-клиента, установившего соединение. Переменная $proxy_add_x_forwarded_for берет существующий заголовок X-Forwarded-For из входящего запроса и дописывает в конец через запятую текущий $remote_addr.

Зачем нужен параметр real_ip_recursive on?

Директива real_ip_recursive on заставляет Nginx парсить заголовок X-Forwarded-For с конца и отбрасывать все IP-адреса, входящие в доверенный список set_real_ip_from, останавливаясь на первом недоверенном клиентском IP.

Полезные материалы
Рекомендуем