Какие функции выполняет реверс-прокси перед бэкендом
Что проверяют
Представляете ли вы, что происходит с запросом между браузером и приложением, и как прокси влияет на то, что видит фронтенд: CORS, кеш, куки, реальные IP. Следом часто спрашивают, как настроить отдачу SPA или почему запрос к API работает локально и ломается на проде.
Как отвечать
Реверс-прокси (nginx, Caddy, Traefik, Envoy) стоит перед приложением и принимает запросы от его имени. Основные функции:
- TLS-терминация: сертификаты и HTTPS живут на прокси, бэкенд слушает обычный HTTP во внутренней сети. Caddy выпускает и продлевает сертификаты сам;
- маршрутизация:
/apiуходит в бэкенд, остальное в статику или SSR-сервер. Для фронтенда это главный плюс: один origin, и CORS не нужен; - отдача статики: бандл отдаётся с диска без участия приложения. Файлы с хэшем в имени получают
Cache-Control: public, max-age=31536000, immutable, аindex.htmlкороткий кеш илиno-cache. Для SPA нужен фолбэк, в nginx этоtry_files $uri /index.html; - сжатие и протоколы: gzip или brotli, HTTP/2 и HTTP/3 к клиенту, даже если бэкенд их не умеет;
- балансировка: распределение между экземплярами и исключение упавших по health check;
- защита: rate limiting, лимит на размер тела, заголовки безопасности, скрытие внутренней топологии;
- кеширование ответов и логирование всех запросов в одном месте.
Для фронтендера полезно добавить, что тот же приём работает в разработке: server.proxy в Vite или rewrites в Next.js проксируют /api, и код не зависит от окружения.
Где спотыкаются
Забывают про WebSocket. Без проброса заголовков Upgrade и Connection соединение не поднимется, а nginx по умолчанию закрывает соединение, по которому 60 секунд ничего не приходило (proxy_read_timeout).
Ломают стриминг. Буферизация прокси копит ответ SSE или потоковый вывод модели и отдаёт его одним куском, нужно proxy_buffering off или заголовок X-Accel-Buffering: no.
Не учитывают, что бэкенд теперь видит IP прокси. Реальный адрес приходит в X-Forwarded-For, протокол в X-Forwarded-Proto, и без доверия к ним ломаются лимиты по IP и редиректы на HTTPS.