Инженерные заметки
Серверы

Nginx как reverse proxy

Проксирование приложения через Nginx: заголовки, таймауты, WebSocket и проверка конфигурации.

· 8 мин чтения

Зачем нужен reverse proxy

Reverse proxy принимает запросы от клиентов и передаёт их приложению внутри сети. Он берёт на себя TLS, сжатие, кэширование и ограничения, а приложение остаётся простым и недоступным напрямую.

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

nginx
server {
    listen 80;
    server_name app.example.com;

location / { proxy_pass http://127.0.0.1:8080; 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 приложение получит адрес бэкенда вместо исходного имени, а X-Forwarded-* нужны, чтобы видеть реальный IP клиента и протокол.

Таймауты и буферы

Значения по умолчанию подходят большинству приложений. Меняйте их, только если видите конкретную проблему: 502, 504 или обрезанные ответы.

nginx
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;

WebSocket

Для WebSocket нужны HTTP/1.1 и заголовки обновления соединения.

nginx
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

Проверка и применение

bash
sudo nginx -t
sudo systemctl reload nginx
tail -f /var/log/nginx/error.log
Внимание. Всегда выполняйте nginx -t перед reload и храните копию рабочей конфигурации. Ошибка в файле при restart приведёт к простою.

Типичные ошибки

502 Bad Gateway — бэкенд не отвечает или слушает другой адрес. 504 — бэкенд не успел ответить за таймаут. 413 — тело запроса больше client_max_body_size. В каждом случае ответ ищите в error.log.

Вывод

Reverse proxy — тонкий слой с понятными задачами. Начните с минимальной конфигурации, добавляйте директивы по необходимости и проверяйте каждое изменение.

Связанные статьи