proxy_pass

Тема дорожной карты · Nginx

Директива proxy_pass является ключевым элементом, превращающим Nginx в эффективный обратный прокси. Она позволяет перенаправлять входящие HTTP-запросы на заданный вышестоящий сервер или бэкенд-приложение. Это особенно важно при работе с различными веб-приложениями, такими как Node.js, Python, Ruby, PHP и другими. Используя proxy_pass, можно легко настроить Nginx для работы с любыми серверами, обеспечивая при этом высокую производительность и надежность.

Как это работает

Директива proxy_pass используется для перенаправления запросов на другой сервер. Например, proxy_pass http://backend; указывает Nginx перенаправлять запросы на сервер backend. Если используется блок upstream, то можно указать несколько серверов, например proxy_pass http://backend;, где backend определен внутри блока upstream. Для передачи информации о клиенте, например, реального IP-адреса и протокола, используются директивы proxy_set_header. Например, proxy_set_header X-Real-IP $remote_addr; и proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; позволяют передать эти данные на сервер backend.

Для управления соединениями и таймаутами используются такие директивы, как proxy_connect_timeout, proxy_send_timeout, и proxy_read_timeout. Эти настройки предотвращают зависание запросов и обеспечивают стабильную работу системы. Для поддержки WebSocket также используются директивы proxy_http_version 1.1 и Connection: upgrade.

Когда применять

proxy_pass особенно полезен при работе с различными веб-приложениями. Он позволяет перенаправлять запросы на другие серверы, обеспечивая при этом высокую производительность и надежность. Всегда следует передавать заголовки X-Forwarded-For и X-Real-IP, чтобы backend-серверы могли корректно определить реальный IP-адрес клиента. Это особенно важно для логирования и аудита.

Разумные таймауты также необходимы для предотвращения зависаний запросов. По умолчанию, таймауты настроены слишком мягко (60 секунд), что может быть недостаточно для многих приложений. Поэтому важно настроить таймауты в соответствии с требованиями к уровню обслуживания (SLO).

Для работы с потоковыми ответами, такими как SSE (Server-Sent Events) и long polling, следует выключить буферизацию с помощью директивы proxy_buffering off. Это позволяет Nginx корректно обрабатывать потоковые данные.

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

Типичные ошибки при использовании proxy_pass включают несоответствие заголовков, проблемы с таймаутами и неправильной настройкой соединений. Например, если не передать заголовок X-Forwarded-Proto, backend-сервер может неправильно определить протокол запроса (HTTP или HTTPS). Также важно убедиться, что в конце каждого URI есть слеш, чтобы избежать нежелательных URL-перезаписей.

Связанные понятия

Полезные ресурсы