- Расширена логика получения IP-адреса с учетом новых заголовков, таких как CF-Connecting-IP и Forwarded. - Добавлено детальное логирование заголовков для упрощения отладки. - Внедрен тестовый эндпоинт для проверки извлечения IP-адресов и отображения заголовков запроса.
4.7 KiB
4.7 KiB
Настройка nginx Proxy Manager для корректной передачи IP-адресов
Проблема
При использовании nginx Proxy Manager в режиме bridge, реальный IP-адрес клиента может не передаваться корректно, и вместо него всегда показывается IP-адрес прокси-сервера (например, 90.189.198.107).
Решение
1. Настройка nginx Proxy Manager
В настройках прокси-хоста в nginx Proxy Manager добавьте следующие заголовки:
В разделе "Advanced" → "Custom Nginx Configuration":
# Передача реального IP-адреса клиента
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;
# Дополнительные заголовки для лучшей совместимости
proxy_set_header X-Client-IP $remote_addr;
proxy_set_header X-Forwarded $scheme://$host;
# Установка доверенного прокси
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Server $host;
Или в разделе "Custom Nginx Configuration" (если доступен):
location / {
proxy_pass http://your-app-container:3000;
# Передача реального IP-адреса
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;
proxy_set_header X-Client-IP $remote_addr;
# Дополнительные настройки
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Server $host;
# Таймауты
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# Буферизация
proxy_buffering off;
proxy_request_buffering off;
}
2. Настройка Docker Compose (если используется)
Если ваш nginx Proxy Manager работает в Docker, убедитесь, что в docker-compose.yml правильно настроена сеть:
version: "3.8"
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- npm-network
restart: unless-stopped
your-app:
image: your-app-image
container_name: your-app
networks:
- npm-network
restart: unless-stopped
networks:
npm-network:
driver: bridge
3. Проверка работы
После настройки используйте тестовый эндпоинт для проверки:
curl -H "X-Forwarded-For: 192.168.1.100" https://your-domain.com/api/debug/ip
Или откройте в браузере: https://your-domain.com/api/debug/ip
4. Ожидаемый результат
В ответе должно быть:
{
"detected_ip": "192.168.1.100", // Реальный IP клиента
"headers": {
"x-forwarded-for": "192.168.1.100",
"x-real-ip": "192.168.1.100",
"x-client-ip": "192.168.1.100"
}
}
5. Отладка
Если IP-адрес все еще неправильный:
- Проверьте логи nginx Proxy Manager
- Убедитесь, что заголовки передаются (используйте
/api/debug/ip) - Проверьте настройки сети Docker
- Убедитесь, что nginx Proxy Manager не находится за дополнительными прокси
6. Дополнительные настройки
Для Cloudflare
Если вы используете Cloudflare, добавьте:
proxy_set_header CF-Connecting-IP $http_cf_connecting_ip;
Для AWS Load Balancer
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
Примечания
- После изменения настроек nginx Proxy Manager перезапустите контейнер
- Убедитесь, что ваш Node.js сервер настроен с
app.set("trust proxy", true) - Тестовый эндпоинт
/api/debug/ipможно удалить после настройки