Когда проксирование 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 и логи должны сходиться.