Что такое reverse proxy и какие задачи решает 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-контроллер
Подробно
Коды ошибок прокси:
| код | причина |
|---|---|
| 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.
- Заголовки проброса и типичные ошибки конфигурации.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗nginx не умеет балансировать нагрузку
- ✓Принимает запросы от имени серверов: TLS, балансировка, маршрутизация, статика, кэш
- ✗Работает от имени клиентов: скрывает их адреса и выпускает их во внешний интернет через себя
- ✗Ошибка 502 означает, что клиент прислал неверный запрос
Разбор темы
- Сети на сервере — подсети, firewall, reverse proxy и диагностика
Как читать CIDR и планировать подсети, как ограничивать сетевой доступ, зачем nginx перед приложением и как искать, почему сервис A не видит сервис B.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.