Что означает ошибка 502 в Nginx
Ошибка 502 Bad Gateway появляется, когда Nginx не может получить ответ от upstream-сервера (бэкенда), к которому он перенаправляет запросы. В логах вы увидите точную причину, например:
2026/06/26 12:34:56 [error] 12345#12345: *1 - upstream timed out (110: Connection timed out) while processing request, client: 192.168.1.10, server: example.com, request: "GET / HTTP/1.1", host: "example.com"
Это значит, что Nginx дождался ответ более 60 секунд (или установленный таймаут) и прервал ожидание.
Причины возникновения
- Отсутствие или неверный конфигурационный файл
upstream– неправильный хост, порт или имя хоста. - Бэкенд-сервер недоступен – сервис остановлен, заблокирован брандмауэром или упал.
- Таймаут соединения – upstream-сервер медленно отвечает или сетевое устройство перегружено.
- Неправильные сетевые правила – firewall блокирует трафик к бэкенду или порту Nginx.
- Ошибки в конфигурации Nginx – синтаксис, неправильный
proxy_passилиincludeнедействительных файлов.
Способы решения
Способ 1: Проверка конфигурации Nginx
Сначала убедитесь, что конфигурация синтаксически корректна и пути до upstream серверов существуют.
# Проверка конфигурации (без перезагрузки)
nginx -t
Если есть ошибка, отредактируйте файл /etc/nginx/nginx.conf или включаемые файлы в /etc/nginx/conf.d/. После исправления выполните команду снова.
💡 Совет: Сохраните последнюю рабочую конфигурацию перед изменениями:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup.
Способ 2: Проверка доступности upstream-сервера
Убедитесь, что бэкенд-сервер действительно работает и слушает на нужном порту.
# Простой тест с помощью curl (замените на реальные значения)
curl -I http://127.0.0.1:8080
# Альтернатива: netcat
nc -zv 127.0.0.1 8080
Если соединение отклонено, запустите сервис (systemctl start php-fpm, systemctl start node), проверьте его логи или исправьте сетевые правила.
Способ 3: Анализ логов Nginx
Логи ошибок содержат точную причину сбоя upstream.
# Просмотр последних записей
tail -n 50 /var/log/nginx/error.log
# Поиск строк, связанных с 502
grep "502" /var/log/nginx/error.log
Ищите сообщения типа upstream timed out, connection refused или no response. Эти строки укажут на проблемный сервер или порт.
Способ 4: Проверка сетевых правил и брандмауэра
Если брандмауэр блокирует трафик, ошибка 502 также проявится как таймаут.
# Для UFW
ufw status verbose
# Для iptables (пример для chain INPUT)
iptables -L INPUT -n --line-numbers
Разрешите необходимые порты:
# Пример для UFW
ufw allow 8080/tcp
# Пример для iptables (добавить правило в конец)
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
После изменений перезапустите брандмауэр (systemctl restart ufw или iptables-restore <rules>).
Способ 5: Перезапуск Nginx
Если предыдущие шаги не помогли, перезапустите Nginx, чтобы он перезагрузил соединения с upstream.
systemctl restart nginx
# Проверьте статус
systemctl status nginx
⚠️ Важно: Перед перезапуском убедитесь, что никакие критически важные процессы не используют старый процесс Nginx.
Профилактика
- Регулярно проверяйте логи – автоматизируйте мониторинг записей
upstream timed outс помощью скриптов (tail -f /var/log/nginx/error.log | grep timed out). - Используйте health-check – настройте
proxy_next_upstreamиhealth_checkв конфигурации location для автоматического переключения на другой сервер при ошибках. - Ограничьте количество одновременных соединений – добавьте в конфигурацию
client_body_buffer_sizeиproxy_buffering on;для снижения нагрузки. - Мониторьте доступность бэкенда – установите
monitor.sh, который каждую минуту выполняетcurlк бэкенду и отправляет уведомление при сбое. - Обновляйте конфигурацию после изменений – после редактирования
nginx.confилиupstreamфайлов всегда выполняйтеnginx -tперед перезапуском.
С помощью этих шагов вы сможете быстро устранить ошибку 502 и сделать ваш веб-сайт стабильным. Удачи!