# Настройка 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": ```nginx # Передача реального 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" (если доступен): ```nginx 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 правильно настроена сеть: ```yaml 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. Проверка работы После настройки используйте тестовый эндпоинт для проверки: ```bash curl -H "X-Forwarded-For: 192.168.1.100" https://your-domain.com/api/debug/ip ``` Или откройте в браузере: `https://your-domain.com/api/debug/ip` ### 4. Ожидаемый результат В ответе должно быть: ```json { "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-адрес все еще неправильный: 1. Проверьте логи nginx Proxy Manager 2. Убедитесь, что заголовки передаются (используйте `/api/debug/ip`) 3. Проверьте настройки сети Docker 4. Убедитесь, что nginx Proxy Manager не находится за дополнительными прокси ### 6. Дополнительные настройки #### Для Cloudflare Если вы используете Cloudflare, добавьте: ```nginx proxy_set_header CF-Connecting-IP $http_cf_connecting_ip; ``` #### Для AWS Load Balancer ```nginx 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` можно удалить после настройки