NoteJS/NGINX_PROXY_SETUP.md
Fovway 0cb0b27f20 Улучшена функция получения IP-адреса клиента и добавлен тестовый эндпоинт
- Расширена логика получения IP-адреса с учетом новых заголовков, таких как CF-Connecting-IP и Forwarded.
- Добавлено детальное логирование заголовков для упрощения отладки.
- Внедрен тестовый эндпоинт для проверки извлечения IP-адресов и отображения заголовков запроса.
2025-10-26 15:20:04 +07:00

150 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Настройка 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` можно удалить после настройки