Skip to content

Как настроить reverse proxy

Коротко:

Reverse proxy принимает запросы от клиентов и перенаправляет на один или несколько backend серверов. Зачем: SSL termination (TLS только на proxy), load balancing, caching, compression. nginx — самый популярный. Минимальный config — 5 строк с proxy_pass. Важно: правильные headers (X-Real-IP, X-Forwarded-For), WebSocket upgrade при нужде.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Пошаговая настройка

  1. Установите nginx: apt install nginx
  2. Определите upstream backend(s): IP:port или hostname
  3. Создайте /etc/nginx/sites-available/myapp.conf с server block
  4. location / { proxy_pass http://backend:3000; }
  5. Добавьте headers: proxy_set_header Host \$host; X-Real-IP \$remote_addr
  6. Для WebSocket: proxy_http_version 1.1; proxy_set_header Upgrade \$http_upgrade; proxy_set_header Connection "upgrade";
  7. nginx -t && systemctl reload nginx
  8. Verify: Enterno HTTP checker — проверит response headers

Рабочие примеры

СценарийКонфиг
Минимальный reverse proxyserver { listen 80; server_name app.example.com; location / { proxy_pass http://127.0.0.1:3000; 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; } }
Load balancing (round-robin)upstream backend { server 10.0.0.1:3000; server 10.0.0.2:3000; server 10.0.0.3:3000; } server { location / { proxy_pass http://backend; } }
Sticky sessions (IP hash)upstream backend { ip_hash; server 10.0.0.1:3000; server 10.0.0.2:3000; }
WebSocket upgradelocation /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; }
Caching proxyproxy_cache_path /var/cache/nginx keys_zone=api_cache:10m; location /api/ { proxy_pass http://backend; proxy_cache api_cache; proxy_cache_valid 200 5m; }

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

  • Без proxy_set_header Host — backend видит "backend" вместо реального domain
  • Без X-Real-IP — backend логирует 127.0.0.1 вместо client IP
  • proxy_buffer слишком маленький для large responses — 502 errors
  • WebSocket без upgrade header — connection закрывается через 60 сек
  • upstream без health check — traffic идёт на dead backend

Больше по теме

Часто задаваемые вопросы

nginx vs HAProxy vs Traefik?

nginx — proven stable, Level 7 load balancer. HAProxy — faster Level 4. Traefik — auto-discovery для Docker/K8s. Для 90% случаев nginx.

Как сделать zero-downtime backend restart?

Blue-green: upstream с 2 backends, stop/start по одному. nginx автоматически routes на live.

Можно ли reverse proxy + SSL termination?

Да — стандартный pattern. SSL на nginx (443), backend HTTP (3000). Backend не знает про TLS.

Performance: reverse proxy тормозит?

Мало. nginx adds ~0.1-0.5ms. Winning features (caching, compression) убирают 100-500ms.