Когда проксирование Nginx не работает, внешний домен открывает 502/504, хотя приложение может быть запущено на локальном порту.

Для Node.js, Python, Docker, API и WebSocket-сервисов Nginx часто является входной точкой. Ошибка в proxy_pass полностью отрезает пользователей от приложения.

Коротко: нужно проверить, доступен ли backend локально, куда смотрит proxy_pass и что пишут error_log Nginx.

Почему это ломается

Прокси ломается из-за неверного порта, остановленного backend, ошибки upstream, firewall, неправильного слеша в proxy_pass, таймаутов, отсутствующих WebSocket-заголовков или конфликта HTTP/HTTPS.

Что проверяю в первую очередь

  • отвечает ли backend на локальном порту
  • что указано в proxy_pass или upstream
  • какой статус пишет Nginx error_log
  • открыт ли нужный порт локально
  • нужны ли WebSocket или специальные заголовки

Как я это чиню

Я проверяю Nginx в две стороны: запрос от пользователя до Nginx и запрос от Nginx до backend-приложения.

  • исправляю proxy_pass и upstream
  • настраиваю заголовки Host, X-Forwarded-For и X-Forwarded-Proto
  • добавляю поддержку WebSocket при необходимости
  • проверяю SSL и редиректы
  • перезагружаю Nginx только после nginx -t

Что подготовить перед обращением

  • домен и конфиг Nginx
  • порт backend-приложения
  • текст ошибки 502/504
  • логи Nginx
  • тип приложения: Node.js, Python, Docker или другое

Как выглядит нормальный результат

Nginx должен стабильно принимать внешний запрос, передавать его в backend, возвращать ответ и корректно работать с HTTPS и WebSocket.

Чего лучше не делать

Не перезапускайте Nginx после правки конфига без проверки nginx -t. Одна ошибка синтаксиса может положить все сайты на сервере.

Вопросы и ответы

Почему backend работает по localhost, а домен нет?

Проблема может быть в Nginx proxy_pass, server_name, SSL или firewall.

Что значит connect() failed upstream?

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

Почему WebSocket не работает через Nginx?

Нужны корректные Upgrade и Connection headers, а иногда отдельные таймауты.

Можно ли проксировать Docker-контейнер?

Да, но нужно понимать, какой порт опубликован наружу или доступен в docker network.

Нужна похожая задача?

Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот или лог ошибки, и я подскажу, с чего безопасно начать исправление.

Итог

Проксирование Nginx чинится через точную связку домен - Nginx - backend: порт, upstream, headers, SSL и логи должны сходиться.