Если что-то не работает
502 Bad Gateway после публикации сайта: что значит и как исправить
Коротко
Ошибка 502 Bad Gateway значит, что сервер-посредник, который принимает посетителей, не смог получить ответ от вашего приложения. Чаще всего приложение упало при запуске, слушает адрес localhost или не тот порт, ещё не успело запуститься или было остановлено из-за нехватки памяти. Причину почти всегда видно в логах приложения: ошибка при старте, строка запуска с адресом 127.0.0.1 или слово Killed. Сам код страницы тут обычно ни при чём — до него запрос просто не дошёл.
- Ошибка 502 Bad Gateway означает, что прокси-сервер перед приложением не получил от него нормального ответа.
- Приложение, которое слушает адрес 127.0.0.1 или localhost, недоступно для прокси и снаружи выглядит как ошибка 502.
- Если приложение слушает порт, отличный от переменной окружения PORT, прокси стучится не туда и возвращает 502.
- Строка Killed или код выхода 137 в логах обычно означает, что приложение остановлено из-за нехватки памяти.
- Ошибка 504 Gateway Timeout, в отличие от 502, значит, что приложение не упало, а не успело ответить вовремя.
Сайт опубликован, ссылка есть, а вместо страницы — 502 Bad Gateway. Ошибка звучит так, будто сломался сервер, но обычно сервер как раз в порядке. Перед вашим приложением всегда стоит посредник, прокси-сервер: он принимает посетителей, следит за HTTPS и передаёт запросы приложению. Ошибка 502 — это его способ сказать «я передал запрос дальше, но приложение не ответило или ответило чем-то непонятным».
Значит, искать нужно не в настройках хостинга, а в самом приложении: работает ли оно вообще, туда ли оно слушает и хватает ли ему ресурсов. Почти всегда ответ лежит в логах. Ниже — причины по частоте и как проверить каждую.
| Что видно | Вероятная причина | Что сделать |
|---|---|---|
| 502 всегда, в логах ошибка и перезапуск по кругу | Приложение падает при запуске | Найдите первую ошибку в логах и исправьте её |
| 502 всегда, в логах Running on 127.0.0.1 | Приложение слушает localhost | Укажите адрес 0.0.0.0 |
| 502 всегда, в логах порт 5000, 8000 или 3000 | Порт прописан жёстко | Читайте порт из переменной PORT |
| 502 первые минуты после публикации, потом открывается | Долгий запуск: загрузка модели или данных | Подождите или ускорьте запуск, тяжёлое грузите в фоне |
| 502 время от времени, в логах Killed или код 137 | Не хватает памяти | Уменьшите потребление памяти или возьмите тариф с большим объёмом |
| 502 только на одной странице или действии | Этот запрос роняет приложение | Откройте страницу и сразу посмотрите ошибку в логах |
Откройте логи и найдите первую ошибку#
Начните с логов приложения, а не с кода страницы: ошибка 502 почти всегда видна там. Если приложение падает при запуске, в логах будет сообщение об ошибке, а затем повторный запуск и та же ошибка снова — смотрите на самую первую, остальные её повторяют. Типичные виновники: недостающая библиотека, неверное имя файла для запуска, не заданный токен или пароль от базы. Исправьте эту ошибку и опубликуйте проект заново.
Проверьте адрес: 0.0.0.0, а не localhost#
Если приложение запустилось без ошибок, найдите в логах строку, где оно пишет, какой адрес слушает. Если там 127.0.0.1 или localhost, приложение принимает подключения только изнутри своей машины, и прокси до него не достучится. Укажите адрес 0.0.0.0: во Flask это параметр host, в uvicorn — флаг --host, в gunicorn — флаг --bind. Это самая частая причина 502 у сайта, который отлично работает на компьютере.
Проверьте порт: он должен браться из переменной PORT#
Прокси передаёт запросы на порт, который хостинг сообщает приложению через переменную окружения PORT. Если в коде жёстко прописано 5000, 8000 или 3000, приложение работает, но на другом порту, и прокси отвечает 502. Читайте порт из переменной PORT, оставив число только как запасной вариант для запуска у себя. В Netrun платформа задаёт PORT сама, а для проекта со своим Dockerfile порт берётся из первой строки EXPOSE.
Дайте приложению время запуститься#
Если 502 появляется только в первые секунды или минуты после публикации, а потом сайт открывается, приложение просто долго запускается. Обычно это загрузка модели нейросети, большого файла с данными или прогрев кэша прямо при старте. Пока приложение не начало слушать порт, прокси отвечает 502. Подождите, а если запуск слишком долгий — перенесите тяжёлую загрузку в фон, чтобы сайт начинал отвечать сразу, а модель догружалась параллельно.
Проверьте, хватает ли памяти#
Если сайт то открывается, то отвечает 502, а в логах встречается слово Killed или код выхода 137, приложение остановили из-за нехватки памяти, и оно перезапускается. Чаще всего память съедают модели нейросетей, загрузка больших файлов целиком, большие таблицы в pandas и несколько рабочих процессов сервера там, где хватило бы одного. Уменьшите число процессов, читайте файлы по частям или возьмите тариф с большим объёмом памяти. Подробнее — в отдельной инструкции про ошибку Killed.
Если 502 только на одной странице — воспроизведите и смотрите логи#
Бывает, что главная открывается, а 502 появляется на конкретной странице или после нажатия кнопки. Это значит, что именно этот запрос роняет приложение: необработанная ошибка, слишком тяжёлая операция или нехватка памяти на большом файле. Откройте логи, повторите действие и сразу посмотрите, что появилось в конце: там будет текст ошибки с номером строки. Если же страница не падает, а просто долго думает, вместо 502 обычно приходит 504 Gateway Timeout — тогда долгую работу стоит вынести в фон.
Ошибка 502 Bad Gateway после публикации — это почти всегда история про приложение, а не про хостинг: оно не запустилось, слушает не тот адрес или порт, ещё грузится или упирается в память. Начните с логов, проверьте адрес 0.0.0.0 и порт из переменной PORT — этого хватает в большинстве случаев. В Netrun статус проекта и живые логи видны в кабинете, упавшее приложение перезапускается само, а если проект долго не работает, приходит уведомление. Для сайта, который должен открываться мгновенно в любое время, есть тариф Pro: на бесплатном сайт засыпает без посетителей, и первое открытие после сна занимает несколько секунд. Попробовать Netrun.
Частые вопросы
Что значит 502 Bad Gateway простыми словами?
Перед вашим сайтом стоит посредник, который принимает посетителей и передаёт запросы приложению. Ошибка 502 значит, что посредник запрос передал, а приложение не ответило: оно не запущено, упало или слушает не там. Чинить нужно приложение, а не браузер или интернет у посетителя.
Почему локально сайт работает, а после публикации 502?
Чаще всего потому, что приложение слушает localhost или жёстко прописанный порт. У вас на компьютере браузер и приложение на одной машине, поэтому всё работает, а на сервере посредник стучится снаружи и на другой порт. Укажите адрес 0.0.0.0 и порт из переменной PORT.
Чем 502 отличается от 504?
Ошибка 502 значит, что приложение не ответило вовсе или ответило некорректно — обычно оно не запущено или упало. Ошибка 504 Gateway Timeout значит, что приложение работает, но не уложилось во время ожидания. Первую ищите в логах запуска, вторую — в медленных запросах.
Может ли 502 пройти сама?
Да, если приложение просто долго запускалось или перезапускалось после сбоя: через несколько секунд или минут сайт откроется. Но если 502 держится постоянно или возвращается регулярно, сама она не пройдёт — в логах будет причина, которую нужно исправить.
Что делать, если в логах нет никаких ошибок, а сайт отдаёт 502?
Посмотрите строку, где приложение сообщает, что запустилось, — в ней адрес и порт. Отсутствие ошибок при 502 почти всегда означает, что приложение работает, но слушает localhost или не тот порт. Поменяйте адрес на 0.0.0.0, а порт берите из переменной PORT.
Проект не открывается, что делать?
Откройте страницу проекта и загляните в его статус и логи. Если разобраться не получается, напишите нам на почту.
Что будет, если приложение упадёт?
Мы следим за проектами и перезапускаем их при сбое. Статус и логи видны в кабинете сразу, а уведомление приходит, только если приложение так и не вернулось в работу в течение часа: из-за коротких перебоев мы вас не тревожим.
Где посмотреть логи и статус проекта?
На странице проекта есть статус, логи и история событий — по ним видно, что происходит с проектом прямо сейчас. Лента логов показывает и более ранние строки: пролистайте её вверх, и они подгрузятся сами.