Nginx proxy_pass: прокси для приложения
Директива proxy_pass передаёт запросы от Nginx приложению, которое слушает другой адрес или порт. Важно, что слэш в URI внутри proxy_pass меняет обработку пути: без него Nginx передаёт исходный URI, а с URI-частью заменяет совпавший префикс location.
Проксирование приложения на localhost:8000
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
}Передавайте исходные host, IP клиента и схему только если backend ожидает эти заголовки и доверяет запросам от Nginx.
Чем отличается слэш в proxy_pass
location /api/ {
proxy_pass http://127.0.0.1:8000;
}
location /service/ {
proxy_pass http://127.0.0.1:8000/;
}Запрос /api/users в первом случае приходит upstream как /api/users; запрос /service/users во втором — как /users.
WebSocket
Для WebSocket добавьте передачу upgrade-заголовков и задайте таймаут чтения для долгих соединений. Эти настройки нужны только endpoint'ам, которые действительно используют WebSocket.
Как проверить конфигурацию?
Выполните nginx -t, затем sudo systemctl reload nginx. После reload проверьте ответ приложения через публичный адрес и логи upstream.
Почему backend видит IP прокси?
Приложение должно корректно обрабатывать X-Forwarded-For и доверять этим заголовкам только от известного reverse proxy. Иначе заголовок можно подделать напрямую.