Все статьи

API Gateway и Reverse Proxy: Nginx, Traefik и Kong для Full Stack проектов

Полное руководство по Reverse Proxy, API Gateway, маршрутизации запросов, HTTPS, TLS, Load Balancing, Rate Limiting, Docker и построению Production-инфраструктуры

25 минут чтения

Представим, что вы разрабатываете SaaS-приложение. Frontend написан на React и TypeScript. Backend работает на FastAPI. PostgreSQL хранит данные, Redis используется для кеширования, а отдельный сервис обрабатывает фоновые задачи. На этапе локальной разработки архитектура выглядит просто: React: localhost:5173 FastAPI: localhost:8000 PostgreSQL: localhost:5432 Redis: localhost:6379

React отправляет запросы напрямую к FastAPI. Всё работает. Но наступает момент публикации приложения в Production. Теперь необходимо решить несколько вопросов. Как разместить Frontend и Backend на одном домене? Где настроить HTTPS? Как направлять запросы /api к FastAPI, а остальные — к React-приложению? Как распределять нагрузку между несколькими экземплярами Backend? Как ограничивать слишком частые запросы?

Как скрыть внутренние сервисы от публичного интернета? И чем отличаются Nginx, Traefik и Kong? Для решения этих задач используются Reverse Proxy и API Gateway. В этой статье разберём API Gateway для Full Stack приложения, Nginx Reverse Proxy, Traefik Docker, Kong API Gateway, маршрутизацию, TLS Termination, Load Balancing, Rate Limiting, а также практические конфигурации для React + FastAPI.


1. Что такое Reverse Proxy

Reverse Proxy что это — сервер, который принимает запросы клиентов и перенаправляет их на внутренние серверы приложения. Например: Internet | v Nginx :443 | +-------+-------+ | | v v React App FastAPI Пользователь обращается к одному публичному адресу:

https://app.example.com

Но за ним могут находиться разные сервисы. Reverse Proxy решает, куда отправить запрос, и возвращает клиенту ответ. При этом пользователь не обязан знать адреса внутренних контейнеров.

2. Чем Reverse Proxy отличается от Forward Proxy

Forward Proxy vs Reverse Proxy — важное различие. Forward Proxy обычно действует от имени клиента. Reverse Proxy действует перед серверами приложения. Для Full Stack проектов чаще всего необходим именно Reverse Proxy.

3. Зачем нужен Reverse Proxy

Зачем нужен Reverse Proxy в Production:

  • принимать HTTPS-запросы;
  • направлять трафик к разным сервисам;
  • балансировать нагрузку;
  • ограничивать размер запросов;
  • устанавливать таймауты;
  • передавать необходимые заголовки;
  • централизованно вести журналы;
  • скрывать внутреннюю топологию приложения.

Однако Reverse Proxy не заменяет проверки авторизации в Backend. Даже если сервис доступен только через Nginx, FastAPI всё равно должен проверять права пользователей.


4. Что такое API Gateway

API Gateway что это — компонент, предоставляющий единую точку входа для API и реализующий политики управления API-трафиком. Он может выполнять:

  • маршрутизацию;
  • аутентификацию клиентов;
  • проверку токенов;
  • Rate Limiting;
  • управление API Keys;
  • преобразование запросов;
  • сбор метрик;
  • применение политик доступа;
  • управление версиями API.

Например: Client | v API Gateway | +-----------+-----------+ | | | v v v User API Billing API Files API API Gateway особенно полезен, когда приложение состоит из нескольких API-сервисов или обслуживает внешних разработчиков.

5. API Gateway vs Reverse Proxy

API Gateway vs Reverse Proxy — сравнение не двух полностью взаимоисключающих технологий, а двух наборов функций. Nginx может выполнять часть функций API Gateway. Traefik тоже поддерживает middleware и политики маршрутизации. Kong специализируется на управлении API и расширяется через плагины. Выбор зависит от требований, а не от названия продукта.

6. Нужен ли API Gateway монолиту

API Gateway для монолита не всегда оправдан. Если приложение состоит из React и одного FastAPI Backend, часто достаточно Nginx или Traefik. Например: Browser | v Nginx | +--> React | +--> FastAPI Отдельный Kong может добавить сложность без существенной пользы.

Но если монолит предоставляет публичное API партнёрам, управляет API Keys и требует разных политик для клиентов, полноценный API Gateway уже может быть полезен.


7. Что такое Nginx

Nginx для Full Stack приложения — популярный веб-сервер и Reverse Proxy. Его используют для:

Nginx часто устанавливают перед FastAPI, Django, Node.js и другими Backend-приложениями.

8. Как работает Nginx Reverse Proxy

Nginx Reverse Proxy FastAPI: Client | v Nginx :443 | v FastAPI :8000 Nginx принимает публичный запрос. Затем перенаправляет его на внутренний адрес FastAPI. Например:

http://backend:8000

В Docker Compose имя backend может разрешаться через внутренний DNS сети контейнеров.

9. Как настроить Nginx для FastAPI

Nginx proxy_pass пример: server { listen 80; server_name app.example.com; location /api/ { proxy_pass http://backend: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; } } Здесь: location /api/ обрабатывает запросы с префиксом /api/. А: proxy_pass http://backend:8000/;

передаёт их Backend. Важно учитывать завершающий / в proxy_pass. В показанной конфигурации префикс /api/ заменяется на /. Поэтому запрос: /api/users попадёт в FastAPI как: /users Если FastAPI уже использует маршруты с префиксом /api, конфигурацию нужно изменить.


10. Как разместить React и FastAPI на одном домене

React FastAPI Nginx Production можно организовать следующим образом:

https://app.example.com/

| v Nginx | +--> /api/* --> FastAPI | +--> /* -----> React SPA Пример конфигурации: server { listen 80; server_name app.example.com; root /usr/share/nginx/html; index index.html; location /api/ { proxy_pass http://backend:8000/; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { try_files $uri $uri/ /index.html; } }

try_files нужен для Client-Side Routing. Например, пользователь открывает:

https://app.example.com/projects/42

Nginx возвращает index.html, после чего React Router обрабатывает маршрут. Без такой настройки обновление страницы на вложенном URL может приводить к ошибке 404.

11. Почему один Origin упрощает авторизацию

Same Origin React FastAPI — архитектура, в которой Frontend и Backend доступны через один Origin. Например:

https://app.example.com/

https://app.example.com/api/

Это упрощает работу с Cookie. Также часто отпадает необходимость настраивать CORS между React и FastAPI. Но отсутствие CORS не означает автоматическую защиту от CSRF. Если приложение использует Cookie-сессии, Backend должен отдельно учитывать CSRF-риски.


12. Что такое TLS Termination

TLS Termination Nginx — завершение защищённого HTTPS-соединения на Reverse Proxy. Например: Browser | | HTTPS v Nginx | | HTTP во внутренней защищённой сети v FastAPI В такой архитектуре Nginx отвечает за TLS. FastAPI может принимать HTTP-запросы во внутренней сети. Однако передача HTTP между Proxy и Backend допустима только при соответствующей модели доверия и защищённости сети.

Для распределённой инфраструктуры может потребоваться TLS и на внутренних соединениях.

13. Как настроить HTTPS в Nginx

Nginx HTTPS конфигурация: server { listen 443 ssl; server_name app.example.com; ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem; location /api/ { proxy_pass http://backend:8000/; } } Это сокращённый пример. В Production также нужно учитывать:

  • актуальные версии TLS;
  • безопасные параметры сертификатов;
  • перенаправление HTTP на HTTPS;
  • автоматическое обновление сертификатов;
  • HSTS после проверки конфигурации;
  • настройки таймаутов;
  • заголовки проксирования.

14. Что такое Let's Encrypt

Let's Encrypt Nginx SSL — распространённый способ получать бесплатные TLS-сертификаты. Сертификаты можно выпускать и обновлять с помощью ACME-клиентов. Например, Certbot. Но автоматизация зависит от инфраструктуры. Если приложение работает в Docker, Kubernetes или облачной платформе, выпуск сертификатов может выполнять отдельный компонент.

Важно обеспечить автоматическое обновление, иначе сертификат однажды истечёт и HTTPS перестанет работать корректно.


15. Что такое Load Balancing

Load Balancing Backend — распределение входящих запросов между несколькими экземплярами приложения. Например: Nginx | +---------+---------+ | | | v v v API 1 API 2 API 3 Это позволяет:

  • распределять нагрузку;
  • повышать доступность;
  • обновлять экземпляры постепенно;
  • увеличивать вычислительную мощность.

Но Load Balancing не делает приложение автоматически отказоустойчивым. Если все экземпляры зависят от одной недоступной базы данных, система всё равно может перестать работать.

16. Как настроить Nginx Upstream

Nginx upstream load balancing: upstream fastapi_backend { server backend1:8000; server backend2:8000; server backend3:8000; } server { listen 80; location /api/ { proxy_pass http://fastapi_backend/; } } По умолчанию Nginx Open Source использует Round Robin для такого Upstream. Запросы распределяются между доступными серверами в соответствии с настройками.

17. Какие алгоритмы балансировки существуют

Алгоритмы Load Balancing: Ни один алгоритм не является универсально лучшим. Например, Least Connections не всегда отражает фактическую загрузку CPU.

18. Почему Backend должен быть Stateless

Stateless Backend масштабирование упрощает горизонтальное масштабирование. Плохая архитектура: API 1: session_user_42 API 2: нет этой сессии Если пользователь попадёт на API 2, приложение может потерять его сессию. Лучше использовать общее серверное хранилище сессий: API 1 ----+ | v Redis ^ | API 2 ----+ Либо другую архитектуру, не требующую локального состояния конкретного экземпляра.

Sticky Sessions могут быть полезны в отдельных сценариях, но не заменяют продуманное управление состоянием.


19. Что такое Health Check

Health Check FastAPI Nginx помогает определять состояние приложения. Например: from fastapi import FastAPI app = FastAPI() @app.get("/health") def health(): return {"status": "ok"} Но простой ответ 200 означает только то, что Endpoint доступен. Для Production полезно различать:

  • Liveness — жив ли процесс;
  • Readiness — готов ли экземпляр принимать запросы.

Readiness может учитывать критичные зависимости. При этом не стоит делать Liveness зависимым от каждой внешней системы: временный сбой базы данных не всегда должен приводить к бесконечным перезапускам приложения.

20. Active vs Passive Health Checks

Active Passive Health Checks — два подхода. Active Health Check регулярно отправляет специальные запросы Backend. Passive Health Check определяет проблемы по ошибкам обычных запросов. Поддержка зависит от конкретного продукта и редакции. Например, полноценные активные проверки Upstream в Nginx могут требовать коммерческих возможностей или дополнительного решения.

Нельзя предполагать, что любая конфигурация Nginx автоматически выполняет активные Health Checks.


21. Что такое Traefik

Traefik Reverse Proxy Docker — Reverse Proxy, ориентированный на динамическую инфраструктуру. Он умеет обнаруживать сервисы через различные Providers. Например:

  • Docker;
  • Kubernetes;
  • File Provider.

В Docker-среде Traefik может читать Labels контейнеров и автоматически создавать маршруты. Это удобно, когда сервисы часто добавляются или обновляются.

22. Nginx vs Traefik

Nginx vs Traefik: Для небольшого Docker Compose проекта Traefik часто удобен благодаря автоматическому обнаружению контейнеров. Но Nginx остаётся отличным выбором, если команда предпочитает явную конфигурацию и уже имеет опыт его эксплуатации.


23. Как запустить Traefik в Docker Compose

Traefik Docker Compose пример: services: traefik: image: traefik:v3 command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" ports: - "80:80" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" networks: - web backend: image: my-fastapi-app:latest labels: - "traefik.enable=true"

- "traefik.http.routers.api.rule=Host(`app.example.com`) && PathPrefix(`/api`)" - "traefik.http.routers.api.entrypoints=web" - "traefik.http.services.api.loadbalancer.server.port=8000" networks: - web networks: web: Это учебная HTTP-конфигурация. Для Production необходимо настроить HTTPS, секреты, безопасность Docker API и ограничения доступа к инфраструктуре.

Также важно помнить: даже Read-Only доступ к Docker Socket предоставляет очень чувствительные возможности наблюдения за Docker API. В более строгой архитектуре можно использовать Docker Socket Proxy с минимальными разрешениями или другой Provider.

24. Как работают Traefik Labels

Traefik Docker Labels маршрутизация позволяют описывать правила прямо рядом с сервисом. Например: labels: - "traefik.enable=true" - "traefik.http.routers.api.rule=Host(`api.example.com`)" - "traefik.http.services.api.loadbalancer.server.port=8000" Traefik создаёт Router и Service. Router определяет, какие запросы подходят под правило. Service указывает, куда отправлять трафик.

Middleware может изменять или ограничивать обработку запросов.

25. Что такое Traefik Router

Traefik Router Service Middleware — базовая модель Traefik. Incoming Request | v Router | v Middleware | v Service | v Backend Например: Host(`api.example.com`) направляет запросы к API. А: PathPrefix(`/api`) позволяет маршрутизировать запросы по префиксу пути.


26. Как настроить HTTPS в Traefik

Traefik Let's Encrypt HTTPS можно настроить через ACME. Сокращённый пример: command: - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.le.acme.email=admin@example.com" - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json" - "--certificatesresolvers.le.acme.httpchallenge=true" - "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web" Для этого необходимо обеспечить:

  • доступность порта 80 для HTTP Challenge;
  • доступность порта 443;
  • постоянное хранилище ACME-состояния;
  • корректный DNS;
  • защиту файла с ACME-данными.

Также требуется привязать Router к соответствующему Certificate Resolver. Это не полная Production-конфигурация, а иллюстрация основных параметров.

27. Как настроить Redirect HTTP на HTTPS

HTTP to HTTPS Redirect Traefik можно реализовать на уровне EntryPoint или Middleware. Например: command: - "--entrypoints.web.address=:80" - "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--entrypoints.web.http.redirections.entrypoint.scheme=https" - "--entrypoints.websecure.address=:443" Такая настройка перенаправляет обычные HTTP-запросы на HTTPS.

При этом необходимо правильно организовать ACME Challenge и учитывать инфраструктуру перед Traefik.


28. Что такое Traefik Middleware

Traefik Middleware примеры включают:

  • Rate Limit;
  • Basic Auth;
  • Headers;
  • Strip Prefix;
  • Redirect Scheme;
  • Forward Auth;
  • Compress.

Middleware можно комбинировать. Например: Request | v Rate Limit | v Forward Auth | v Backend Но порядок применения Middleware может влиять на безопасность и поведение приложения.

29. Как настроить StripPrefix

Traefik StripPrefix удаляет заданный префикс из пути перед передачей запроса Backend. Например: /api/users превращается в: /users Конфигурация: labels: - "traefik.http.middlewares.api-strip.stripprefix.prefixes=/api" - "traefik.http.routers.api.middlewares=api-strip" Это удобно, если FastAPI определяет маршруты без /api. Но важно учитывать генерацию ссылок, OpenAPI Docs и работу приложения за Proxy.


30. Что такое Kong API Gateway

Kong API Gateway что это — платформа управления API-трафиком. Kong Gateway позволяет создавать маршруты к сервисам и применять плагины. Например: External Client | v Kong | +--> Authentication | +--> Rate Limiting | +--> Logging | v FastAPI Kong часто используют в архитектурах с несколькими сервисами, публичными API и сложными политиками доступа.

31. Kong vs Nginx vs Traefik

Kong vs Nginx vs Traefik: Конкретные возможности зависят от версии, редакции и используемых плагинов.

32. Когда выбирать Kong

Когда нужен Kong API Gateway:

  • несколько независимых API;
  • внешние интеграции;
  • API Keys;
  • централизованные политики;
  • разные лимиты для клиентов;
  • управление потребителями API;
  • развитый аудит API;
  • необходимость расширяемой API-инфраструктуры.

Но если задача состоит только в проксировании /api на FastAPI, Kong может быть избыточным.


33. Как устроены Kong Services и Routes

Kong Service Route — базовые сущности Kong. Service описывает Upstream API. Route определяет условия, при которых запрос направляется к Service. Например: Client | v Kong Route: /api/users | v Kong Service: user-service | v FastAPI Плагины могут применяться к различным сущностям в зависимости от возможностей конкретной версии и конфигурации.

34. Что такое Kong Plugins

Kong Plugins API Gateway позволяют расширять поведение Gateway. Например:

  • Rate Limiting;
  • Key Authentication;
  • JWT;
  • CORS;
  • Request Transformation;
  • Logging;
  • Monitoring.

Однако наличие JWT Plugin не означает, что все задачи авторизации решены. Gateway может проверить подпись токена. Но решение о том, имеет ли пользователь право изменить конкретный документ, обычно должно оставаться в бизнес-логике Backend.


35. Что такое Rate Limiting

Rate Limiting API Gateway — ограничение частоты запросов. Например: 100 requests / minute Если клиент превышает лимит, Gateway может вернуть: HTTP/1.1 429 Too Many Requests Rate Limiting помогает:

  • уменьшать злоупотребления;
  • защищать дорогие Endpoint;
  • обеспечивать более справедливое распределение ресурсов;
  • ограничивать автоматизированные запросы.

Но Rate Limiting не гарантирует защиту от всех DDoS-атак. Для сетевых и распределённых атак могут потребоваться CDN, WAF и специализированные средства защиты.

36. Как настроить Rate Limiting в Nginx

Nginx limit_req пример: http { limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s; server { listen 80; location /api/ { limit_req zone=api_limit burst=20 nodelay; proxy_pass http://backend:8000/; } } } В этом примере лимит привязан к IP клиента. Но IP не всегда соответствует одному пользователю. Например, множество пользователей может находиться за одним NAT.

Кроме того, при работе за CDN или другим Proxy нужно правильно определить доверенный клиентский IP. Нельзя без проверки доверять произвольному X-Forwarded-For.

37. Как настроить Rate Limiting в Traefik

Traefik RateLimit Middleware: labels: - "traefik.http.middlewares.api-limit.ratelimit.average=100" - "traefik.http.middlewares.api-limit.ratelimit.period=1m" - "traefik.http.middlewares.api-limit.ratelimit.burst=20" - "traefik.http.routers.api.middlewares=api-limit" Это пример ограничения среднего потока запросов. Важно учитывать, как лимиты работают при нескольких экземплярах Traefik.

Локальные счётчики на разных экземплярах не обязательно образуют единый глобальный лимит. Если требуется строгий распределённый Rate Limiting, необходима соответствующая архитектура.


38. Что такое Authentication на Gateway

API Gateway Authentication позволяет выполнять некоторые проверки до обращения к Backend. Например: Request | v Gateway | v JWT Validation | v Backend Gateway может отклонять запросы без действительного токена. Это уменьшает количество неавторизованных запросов, доходящих до приложения. Но Backend всё равно должен проверять права доступа к конкретным ресурсам.

39. Authentication vs Authorization

Authentication vs Authorization API: Authentication отвечает на вопрос: Кто пользователь? Authorization отвечает на вопрос: Что этому пользователю разрешено? Например: Пользователь успешно вошёл в систему. Но это не означает, что он имеет право удалить проект другой организации. Gateway может выполнять часть Authentication. Однако объектная авторизация должна учитывать бизнес-данные и принадлежность ресурсов.

40. Почему нельзя полностью доверять заголовкам от клиента

Trusted Headers Reverse Proxy — важный аспект безопасности. Например, Gateway может добавлять: X-User-ID: 42 Но если Backend принимает такой заголовок непосредственно от внешнего клиента, злоумышленник может попытаться подменить идентификатор. Поэтому необходимо:

  • закрывать прямой публичный доступ к Backend;
  • удалять или перезаписывать доверенные заголовки на Gateway;
  • защищать соединение Gateway → Backend;
  • явно определять границу доверия.

В чувствительных архитектурах может использоваться дополнительная аутентификация между сервисами.


41. Что такое Forward Auth

Traefik ForwardAuth позволяет передавать проверку доступа внешнему сервису. Например: Browser | v Traefik | v Auth Service | +-- Allowed --> FastAPI | +-- Denied ---> 401 / 403 Это полезно для централизованной проверки сессий или токенов. Но необходимо правильно обрабатывать:

  • Cookie;
  • заголовки;
  • таймауты;
  • недоступность Auth Service;
  • перенаправления;
  • кеширование результатов.

Ошибка в Forward Auth может открыть доступ к защищённым маршрутам или, наоборот, заблокировать всех пользователей.

42. Как работает JWT Validation на Gateway

JWT Validation API Gateway может включать проверку:

  • подписи;
  • алгоритма;
  • Issuer;
  • Audience;
  • срока действия;
  • обязательных Claims.

Но Gateway не должен принимать произвольный JWT только потому, что его структура корректна. Токен должен быть выпущен доверенным Issuer и предназначен для соответствующего API. Также важно управлять обновлением ключей подписи.


43. Как проксировать WebSocket

Nginx WebSocket Proxy требует поддержки HTTP Upgrade. Пример: map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; location /ws/ { proxy_pass http://backend:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; } } Это упрощённая конфигурация.

Для Production также следует настроить таймауты и учитывать продолжительность WebSocket-соединений.

44. Почему WebSocket требует отдельного внимания

WebSocket Reverse Proxy Production отличается от обычных коротких HTTP-запросов. Соединение может оставаться открытым длительное время. Поэтому важны:

  • Idle Timeout;
  • Ping/Pong;
  • лимиты соединений;
  • корректное завершение;
  • распределение нагрузки;
  • хранение общего состояния.

Если WebSocket-клиенты подключены к разным Backend-инстансам, обмен сообщениями между ними может потребовать Redis Pub/Sub или другого Message Broker.


45. Как настроить таймауты

Nginx Proxy Timeout влияет на поведение медленных запросов. Например: location /api/ { proxy_pass http://backend:8000/; proxy_connect_timeout 5s; proxy_send_timeout 30s; proxy_read_timeout 30s; } Но таймауты нельзя выбирать произвольно для всех Endpoint. Например, обычный запрос получения профиля должен выполняться быстро. А потоковая передача большого файла может требовать другой политики.

Для долгих задач лучше рассмотреть асинхронную обработку и отдельный Endpoint получения статуса.

46. Как ограничить размер тела запроса

Nginx client_max_body_size позволяет ограничить размер HTTP Request Body. Например: server { client_max_body_size 10m; } Если запрос превышает лимит, Nginx может вернуть ошибку 413. Это полезно для File Upload. Но ограничение на Reverse Proxy не заменяет проверки размера и типа файла в Backend.


47. Что такое Request Buffering

Nginx Proxy Request Buffering управляет тем, как Proxy обрабатывает тело запроса перед отправкой Backend. По умолчанию Nginx может буферизовать запрос. Это полезно в одних сценариях, но может увеличивать использование временного диска и задержку при больших Upload. Для потоковой передачи можно рассмотреть: proxy_request_buffering off; Однако отключение буферизации меняет нагрузку на Backend.

Поэтому решение должно приниматься после нагрузочного тестирования.

48. Что такое Response Buffering

Nginx Proxy Buffering позволяет Nginx буферизовать ответы Upstream. Это может повышать эффективность при обычных HTTP-ответах. Но для Server-Sent Events или потоковой передачи буферизация может создавать нежелательные задержки. Например: proxy_buffering off; может быть полезно для конкретного Streaming Endpoint. Не следует отключать буферизацию глобально без анализа.


49. Как настроить HTTP Security Headers

Security Headers Nginx помогают повысить безопасность браузерного приложения. Например: add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header X-Frame-Options "DENY" always; Для более гибкого контроля встраивания страниц можно использовать CSP frame-ancestors.

Content Security Policy также помогает ограничивать источники скриптов и других ресурсов. Но CSP необходимо адаптировать к конкретному Frontend. Неправильная политика может сломать приложение.

50. Что такое HSTS

HTTP Strict Transport Security сообщает браузеру, что сайт должен использовать HTTPS. Пример: Strict-Transport-Security: max-age=31536000 HSTS полезен после того, как HTTPS стабильно работает. Но включать includeSubDomains или Preload без проверки всех поддоменов опасно. Это может сделать некоторые HTTP-only сервисы недоступными для браузеров.


51. Как организовать логирование запросов

Access Logs Reverse Proxy помогают анализировать:

  • количество запросов;
  • HTTP Status Codes;
  • время ответа;
  • IP клиентов;
  • User-Agent;
  • маршруты;
  • ошибки Upstream.

Например: GET /api/projects 200 45ms POST /api/login 401 12ms GET /api/files/42 403 8ms Но необходимо избегать записи чувствительных данных. Особенно опасно логировать:

  • Authorization Headers;
  • Session Cookies;
  • API Keys;
  • Presigned URL;
  • токены в Query Parameters.

52. Что такое Request ID

Request ID Distributed Tracing позволяет связывать события одного запроса между сервисами. Например: Request ID: abc-123 Он может передаваться: Nginx | v FastAPI | v Database Это помогает находить ошибки в распределённых системах. Для полноценной трассировки обычно используют Trace Context и инструменты наблюдаемости, например OpenTelemetry.


53. Как мониторить Reverse Proxy

Мониторинг Nginx Traefik Kong включает:

  • Requests Per Second;
  • Error Rate;
  • P95/P99 Latency;
  • Active Connections;
  • Upstream Failures;
  • TLS Errors;
  • Rate Limit Rejections;
  • HTTP 502/503/504.

Например: Requests: 1500 / sec P95 Latency: 180 ms 5xx Error Rate: 0.4% Active Connections: 320 Метрики позволяют понять, где возникла проблема. Но необходимо различать ошибки Proxy и ошибки самого Backend.

54. Что означают 502, 503 и 504

Nginx 502 503 504 ошибки: Причины могут быть разными. Например, 502 не всегда означает, что Backend полностью упал. Это может быть ошибка соединения, протокола или неправильная конфигурация Proxy.


55. Как развернуть React + FastAPI + Nginx через Docker Compose

Docker Compose Nginx FastAPI React: services: backend: build: ./backend expose: - "8000" networks: - internal nginx: image: nginx:stable-alpine ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro - ./frontend/dist:/usr/share/nginx/html:ro depends_on: - backend networks: - internal networks: internal: Здесь Backend не публикует порт наружу. Nginx обращается к нему через внутреннюю Docker-сеть.

Но depends_on в такой форме не гарантирует, что Backend уже готов обслуживать запросы. Для более надёжного запуска нужны Health Checks и соответствующая стратегия запуска. Также это HTTP-пример. В Production необходимо добавить HTTPS и остальные настройки безопасности.

56. Почему нельзя публиковать все порты Docker

Docker Expose vs Ports безопасность — важная тема. Например: ports: - "8000:8000" публикует порт контейнера на хосте. Если он доступен извне, пользователь может обойти Reverse Proxy. Поэтому Backend часто достаточно оставить во внутренней сети. Но expose само по себе не является полноценной защитой. Нужно правильно настроить Docker Networks, Firewall и правила облачной инфраструктуры.


57. Как обновлять Backend без простоя

Zero Downtime Deployment Reverse Proxy предполагает, что во время обновления остаются доступные экземпляры приложения. Например: Before: API 1 API 2 During Deployment: API 1 old API 2 new After: API 1 new API 2 new Для этого нужны:

  • несколько экземпляров;
  • Readiness Checks;
  • Graceful Shutdown;
  • корректная балансировка;
  • совместимость схемы базы данных;
  • продуманная стратегия миграций.

Один только Reverse Proxy не гарантирует Zero Downtime.

58. Что такое Graceful Shutdown

Graceful Shutdown FastAPI позволяет приложению завершать работу без резкого обрыва активных операций. Например, при получении сигнала завершения сервер прекращает принимать новые запросы и предоставляет время текущим операциям завершиться. Важны:

  • таймаут остановки;
  • завершение фоновых задач;
  • закрытие соединений;
  • работа WebSocket;
  • корректное удаление экземпляра из балансировки.

В Kubernetes и других оркестраторах эти механизмы тесно связаны с Readiness и Lifecycle Hooks.


59. Что такое Service Discovery

Service Discovery Reverse Proxy — механизм обнаружения доступных экземпляров сервисов. В Docker Compose сервисы могут обнаруживаться по DNS-именам. В Kubernetes используются Services и другие сетевые механизмы. Traefik может получать сведения о контейнерах из Docker Provider. Nginx также можно интегрировать с динамической инфраструктурой, но конкретная реализация зависит от конфигурации и версии.

60. Reverse Proxy в Kubernetes

Ingress Controller Kubernetes позволяет маршрутизировать входящий трафик к сервисам кластера. Например: Internet | v Ingress Controller | v Kubernetes Service | v FastAPI Pods Для новых архитектур также важно учитывать Kubernetes Gateway API, который предоставляет более гибкую модель управления сетевым трафиком. Но выбор между Ingress и Gateway API зависит от поддерживаемых контроллеров и требований платформы.


61. Как выбрать между Nginx, Traefik и Kong

Выбор API Gateway для проекта зависит от сложности системы. Обычно достаточно Nginx. Он может обслуживать React Build и проксировать API. Traefik может упростить маршрутизацию благодаря Docker Labels. Kong полезен, если нужны API Keys, Consumer Management и централизованные политики. Выбор зависит от сетевой архитектуры и доступных контроллеров. Можно использовать Nginx, Traefik, Kong и другие решения.

API Gateway может стать удобной точкой применения общих политик. Но бизнес-авторизация должна оставаться в сервисах, владеющих соответствующими ресурсами.


62. Типичные ошибки при настройке API Gateway

Первая ошибка — считать Reverse Proxy заменой Backend-авторизации. Вторая — публиковать внутренний Backend напрямую в интернет. Третья — доверять X-Forwarded-For от любого клиента. Четвёртая — неправильно настраивать proxy_pass и префиксы путей. Пятая — забывать про WebSocket Upgrade. Шестая — не ограничивать размер запросов. Седьмая — устанавливать одинаковые таймауты для всех Endpoint.

Восьмая — хранить TLS Private Key в репозитории. Девятая — не автоматизировать обновление сертификатов. Десятая — использовать только один Backend-инстанс и ожидать отказоустойчивости. Одиннадцатая — не учитывать Readiness. Двенадцатая — использовать локальные сессии при горизонтальном масштабировании. Тринадцатая — применять Rate Limiting только по IP без анализа NAT и Proxy.

Четырнадцатая — считать локальный Rate Limit глобальным. Пятнадцатая — логировать Authorization Headers. Шестнадцатая — не защищать Docker Socket.

Семнадцатая — не тестировать Redirect HTTP → HTTPS.

Восемнадцатая — не проверять поведение SPA-маршрутов. Девятнадцатая — не мониторить 5xx и задержки Upstream. Двадцатая — внедрять сложный API Gateway без реальной необходимости. Эти ошибки Reverse Proxy Production могут приводить к утечкам данных, недоступности API, неправильной маршрутизации и проблемам масштабирования.


63. Рекомендуемая Production-архитектура

Production архитектура API Gateway React FastAPI: Internet | v DNS / CDN | v Reverse Proxy HTTPS / TLS | +------------+------------+ | | v v React SPA API Gateway | +----------+----------+ | | | v v v FastAPI 1 FastAPI 2 FastAPI 3 | | | +----------+----------+ | +---------+---------+ | | v v PostgreSQL Redis В такой архитектуре: Reverse Proxy принимает внешний HTTPS-трафик. Frontend обслуживается отдельно от Backend.

API Gateway применяет общие политики, если они действительно нужны. FastAPI выполняет бизнес-логику и объектную авторизацию. PostgreSQL хранит данные. Redis может использоваться для кеша, сессий и некоторых распределённых механизмов. Однако для небольшого приложения отдельные Reverse Proxy и API Gateway не обязательны. Их можно объединить в одном компоненте.

Главный принцип — добавлять инфраструктурные уровни по мере появления требований, а не ради сложности.

64. Чек-лист Reverse Proxy и API Gateway для Production

Чек-лист API Gateway Production:

  • Публичный трафик проходит через HTTPS.
  • TLS-сертификаты обновляются автоматически.
  • Внутренние сервисы не опубликованы без необходимости.
  • Правильно настроены Host и Forwarded Headers.
  • Определены доверенные Proxy.
  • Проверена маршрутизация Frontend и API.
  • Настроен SPA Fallback.
  • WebSocket Upgrade работает корректно.
  • Установлены лимиты размера запросов.
  • Таймауты соответствуют характеру Endpoint.
  • Настроен Rate Limiting для чувствительных маршрутов.
  • Backend выполняет собственную авторизацию.
  • Доверенные заголовки очищаются или перезаписываются.
  • Секреты не находятся в конфигурации Git.
  • Docker Socket защищён.
  • Настроены Health Checks.
  • Есть стратегия Graceful Shutdown.
  • Логи не содержат токенов и Cookie.
  • Метрики Proxy собираются централизованно.
  • Отслеживаются 502, 503 и 504.
  • Проверена работа приложения при недоступности Backend.
  • Настроены резервные экземпляры там, где нужна высокая доступность.
  • Проверена процедура обновления без простоя.
  • Конфигурация проходит автоматическую проверку перед деплоем.

FAQ

Reverse Proxy — сервер, который принимает клиентские запросы и направляет их к внутренним сервисам. API Gateway — единая точка входа для API, через которую можно применять маршрутизацию, аутентификацию и другие политики. API Gateway обычно ориентирован на управление API, а Reverse Proxy — на приём и перенаправление сетевого трафика. Их возможности пересекаются.

Nginx удобен для явных конфигураций и обслуживания веб-приложений. Traefik особенно удобен в динамической Docker-инфраструктуре. Когда требуются развитые функции управления API, например API Keys, плагины, централизованные политики и управление клиентами API. Да, для многих задач Nginx способен выполнять функции API Gateway, особенно с дополнительными модулями и интеграциями.

Для HTTPS, маршрутизации, балансировки, ограничения запросов и управления публичным трафиком. Да. Например, React на /, а FastAPI на /api. Завершение HTTPS-соединения на Proxy перед передачей запроса внутреннему сервису. Распределение запросов между несколькими экземплярами приложения. Группа Backend-серверов, к которым Nginx может направлять запросы.

Компонент, изменяющий или ограничивающий обработку запросов, например Rate Limit или Forward Auth. Расширение Kong, реализующее дополнительную функциональность обработки API-запросов. Через Rate Limiting в Nginx, Traefik, Kong или на уровне Backend. Да. Особенно для доступа к конкретным объектам и бизнес-операциям. Нужно корректно настроить HTTP Upgrade и соответствующие заголовки.

Часто из-за проблем соединения с Backend, неправильного Upstream или ошибок протокола. Proxy не получил ответ от Upstream в установленное время. Да. Traefik умеет обнаруживать Docker-сервисы через Provider и Labels. Обычно нет, если весь внешний трафик должен проходить через Reverse Proxy. Компонент Kubernetes, реализующий правила маршрутизации входящего трафика к сервисам.

Часто достаточно Nginx или Traefik. Полноценный API Gateway стоит добавлять при появлении соответствующих требований.


Заключение

Reverse Proxy и API Gateway — важные элементы современной Full Stack инфраструктуры. Они помогают отделить публичный интернет от внутренних сервисов, централизовать маршрутизацию, настроить HTTPS и управлять входящим трафиком. Nginx подходит для веб-приложений, статических ресурсов, проксирования FastAPI и балансировки нагрузки.

Traefik удобен для динамических Docker-окружений, где сервисы обнаруживаются автоматически. Kong полезен для систем с несколькими API, внешними интеграциями и развитыми требованиями к управлению API. Но ни один из этих инструментов не заменяет качественную архитектуру Backend. Reverse Proxy не исправит небезопасную авторизацию.

Load Balancer не сделает приложение отказоустойчивым, если все экземпляры зависят от единственной точки отказа. Rate Limiting не защитит от всех видов атак. А API Gateway не должен становиться местом, где полностью сосредоточена бизнес-логика доступа к данным.

Главный принцип: Reverse Proxy управляет доставкой запросов, API Gateway — общими политиками API, а Backend остаётся ответственным за корректность бизнес-операций и доступ к ресурсам. Для большинства небольших React + FastAPI проектов достаточно начать с Nginx или Traefik.

По мере роста системы можно добавлять балансировку, централизованную аутентификацию, распределённый Rate Limiting и специализированный API Gateway. Так инфраструктура будет развиваться вместе с продуктом, не создавая лишней сложности на раннем этапе.


Наверх