Получить доступ

Что такое reverse proxy и какие задачи решает nginx перед приложением?

JuniorСети и проксиnginx
Ещё спрашивают так:
  • Чем forward proxy отличается от reverse proxy?
  • Что означает ошибка 502 Bad Gateway?
Коротко

Reverse proxy стоит перед серверами и принимает запросы от их имени (forward proxy — наоборот, от имени клиентов). Задачи nginx: терминация TLS, балансировка между экземплярами, маршрутизация по домену и пути, статика, сжатие, кэширование, лимиты (rate limit, размер тела), таймауты и защита приложения от медленных клиентов.

  • 502 — upstream недоступен или оборвал соединение; 504 — upstream не ответил вовремя
  • Заголовки X-Forwarded-For и X-Forwarded-Proto — чтобы приложение знало реальный IP и схему
  • Буферизация ответа освобождает приложение от медленных клиентов

А ещё В Kubernetes ту же роль играет ingress-контроллер

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Коды ошибок прокси:

кодпричина
502приложение не слушает порт, упало, ответило мусором
504приложение не уложилось в proxy_read_timeout
413тело запроса больше client_max_body_size
499клиент закрыл соединение, не дождавшись ответа (лог nginx)

Причина 502 — в error.log nginx: «connect() failed (111: Connection refused)» или «upstream prematurely closed connection».

Подводные камни:

  • proxy_pass со слешем на конце и без — разная подстановка пути;
  • приложение за прокси без доверенных X-Forwarded-* строит неверные редиректы (http вместо https) и видит IP прокси;
  • WebSocket требует заголовков Upgrade и Connection;
  • nginx кэширует DNS upstream при старте — смена IP требует resolver.

Пример

upstream orders { server 10.0.1.11:8080; server 10.0.1.12:8080; }

server {
    listen 443 ssl;
    server_name api.example.com;
    ssl_certificate     /etc/ssl/api.crt;
    ssl_certificate_key /etc/ssl/api.key;
    client_max_body_size 10m;

    location /orders/ {
        proxy_pass http://orders;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 30s;
    }
}

Что хотят услышать

  • Назначение reverse proxy и функции nginx.
  • Различие 502 и 504.
  • Заголовки проброса и типичные ошибки конфигурации.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем