Быстрые ссылки

Ошибки 502, 503, 504 и «ошибка базы данных»: разбор для владельца сайта

Ошибки с кодами 502, 503 и 504 пугают владельцев, но на самом деле они довольно точно указывают, где искать проблему. Все три говорят о том, что веб-сервер работает, но не смог получить ответ от того, что генерирует страницу. А «Ошибка установки соединения с базой данных» — о том, что сайт не может достучаться до MySQL. Разберу каждую ошибку и порядок действий.

Как устроен запрос к сайту

Чтобы понять ошибки, полезна простая схема:

  1. Браузер обращается к веб-серверу (nginx или Apache).
  2. Веб-сервер передаёт запрос PHP (обычно PHP-FPM).
  3. PHP выполняет код CMS и обращается к базе данных MySQL или MariaDB.
  4. Ответ возвращается по цепочке обратно.

Каждая ошибка соответствует обрыву на определённом участке этой цепочки.

502 Bad Gateway

Веб-сервер обратился к PHP и получил некорректный ответ или не смог соединиться.

Частые причины

  • PHP-FPM не запущен или упал. После обновления, из-за ошибки конфигурации или нехватки памяти.
  • Процесс PHP аварийно завершился на конкретном запросе — например, из-за фатальной ошибки в расширении PHP.
  • Неверный путь к сокету PHP-FPM в конфигурации nginx после смены версии PHP.
  • На виртуальном хостинге — перезапуск или перегрузка сервера у провайдера.

Что проверить

  • На своём сервере: статус службы PHP-FPM и её лог.
systemctl status php8.2-fpm
tail -n 50 /var/log/php8.2-fpm.log
tail -n 50 /var/log/nginx/error.log
  • В логе nginx ищите строки connect() failed или upstream prematurely closed connection — они подтверждают проблему с PHP.
  • На виртуальном хостинге — написать в поддержку с точным временем ошибки.

503 Service Unavailable

Сервис временно недоступен. Сервер сознательно отказывает в обработке запроса.

Частые причины

  • Превышены лимиты хостинга — количество одновременных процессов, память, процессорное время. Часто при наплыве ботов или тяжёлых задачах.
  • Режим обслуживания. WordPress во время обновления создаёт файл .maintenance и отдаёт 503. Если обновление прервалось, файл остаётся.
  • Защита от DDoS или ограничение частоты запросов отвечает 503 на слишком активных клиентов.
  • Все процессы PHP-FPM заняты долгими запросами, новые ждут в очереди.

Что проверить

  • Нет ли в корне сайта файла .maintenance — если есть, удалите его.
  • Статистику нагрузки в панели хостинга за время ошибок.
  • Логи доступа: нет ли всплеска запросов от одного IP или ботов.
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

Команда покажет IP-адреса с наибольшим количеством запросов. Если сверху адреса, которые делают тысячи запросов в минуту, — это боты, их стоит ограничить.

504 Gateway Timeout

Веб-сервер дождался таймаута, но PHP так и не ответил.

Частые причины

  • Долгий запрос — импорт товаров, обмен с 1С, генерация отчёта, тяжёлая страница без кэша.
  • Медленная база данных — тяжёлые запросы без индексов, заблокированные таблицы.
  • Обращение к внешнему сервису, который не отвечает: API доставки, курсы валют, отзывы.
  • Маленький таймаут в конфигурации веб-сервера для задач, которым нужно больше времени.

Что делать

  • Найти, какие страницы отвечают долго: лог медленных запросов PHP-FPM (slowlog) показывает, на какой функции завис запрос.
  • Тяжёлые задачи — импорт, обмен, генерацию — переносить в cron и выполнять пошагово, а не в браузере.
  • Внешним запросам ставить короткий таймаут и обрабатывать ошибку.
  • Увеличивать таймауты только для конкретных задач, а не для всего сайта.

«Ошибка установки соединения с базой данных»

Сообщение WordPress (в других CMS текст свой), которое означает: PHP работает, но не может подключиться к MySQL.

Частые причины

  • Неверные доступы в конфигурации — после переноса или смены пароля базы. В WordPress — DB_NAME, DB_USER, DB_PASSWORD, DB_HOST в wp-config.php.
  • MySQL не запущен или упал из-за нехватки памяти или места на диске.
  • Превышено количество соединений к базе.
  • Повреждённые таблицы после сбоя.

Что проверить

  1. Доступы в конфигурации сайта сравнить с данными базы в панели хостинга.
  2. Зайти в phpMyAdmin с теми же доступами — если не пускает, проблема в доступах или самом MySQL.
  3. На своём сервере — статус MySQL, свободное место на диске и лог.
systemctl status mariadb
df -h
  1. Если таблицы повреждены — восстановить. В WordPress есть встроенный инструмент: добавить в wp-config.php строку define(‘WP_ALLOW_REPAIR’, true); и открыть /wp-admin/maint/repair.php. После восстановления строку удалить.

Ошибки, которые возвращаются

Если ошибки появляются регулярно, разовым исправлением не обойтись:

  • сопоставьте время ошибок с cron-задачами и обменом с 1С;
  • проверьте, не упирается ли сайт в лимиты тарифа;
  • настройте кэш страниц, чтобы не генерировать каждую страницу заново;
  • ограничьте агрессивных ботов;
  • оптимизируйте медленные запросы к базе;
  • рассмотрите более мощный тариф или VPS.

Как выбрать хостинг — в статье о хостинге для сайта в Беларуси.

Чем эти ошибки отличаются от ошибки 500

Ошибка 500 — ошибка в самом коде сайта: PHP запустился, но упал при выполнении. 502, 503 и 504 — проблемы взаимодействия между веб-сервером, PHP и ресурсами сервера. Разбор ошибки 500 — в отдельной статье об ошибке 500.

Как защититься от агрессивных ботов

Часть ошибок 503 и 504 вызывают не посетители, а боты: парсеры цен, сканеры уязвимостей, агрессивные поисковые роботы малоизвестных сервисов. Что помогает:

  • ограничение частоты запросов на уровне веб-сервера для одного IP;
  • блокировка известных вредных ботов по User-Agent;
  • защита формы входа в админку и страниц поиска, которые генерируют тяжёлые запросы;
  • кэш страниц, чтобы повторные запросы не нагружали PHP.

Важно не заблокировать поисковых роботов Яндекса и Google: проверяйте правила по логам после внедрения.

Что сообщить поддержке хостинга

Если сайт на виртуальном хостинге, вы не можете посмотреть всё сами. Отправьте в поддержку: адрес сайта, код ошибки, точное время появления, частоту, что менялось перед этим. Попросите проверить логи сервера и превышение лимитов за это время. Конкретный запрос получает конкретный ответ.

Короткий итог

502 — проблема связи с PHP, 503 — сервер отказывает из-за лимитов или обслуживания, 504 — PHP не успел ответить, ошибка базы — нет связи с MySQL. Код ошибки и время её появления сразу сужают круг поиска. Логи веб-сервера, PHP-FPM и панель нагрузки хостинга почти всегда дают ответ, а кэш, ограничение ботов и перенос тяжёлых задач в cron предотвращают повторение.

Профилактика

Мониторинг доступности с уведомлением, кэш страниц, разумные лимиты и регулярный просмотр логов позволяют заметить проблему до того, как её увидят клиенты.

Если ошибки повторяются каждую неделю, это повод для диагностики, а не для очередного перезапуска.

Чек-лист при ошибках 50x

  1. Код ошибки и время появления.
  2. Лог ошибок веб-сервера и PHP-FPM.
  3. Файл .maintenance в корне.
  4. Нагрузка и лимиты в панели хостинга.
  5. Всплески запросов от ботов в логе доступа.
  6. Долгие задачи и внешние API.
  7. Доступность и место для MySQL.
  8. Кэш страниц и оптимизация запросов.

Частые вопросы

Ошибка 503 появляется ночью. Что это?

Чаще всего тяжёлые cron-задачи: резервное копирование, обмен с 1С, генерация карты сайта. Сопоставьте время с расписанием задач.

Может ли ошибку вызвать большое количество посетителей?

Да, если сайт без кэша и упирается в лимиты процессов. Реальные посетители редко создают такую нагрузку — чаще это боты.

Что делать, если ошибка базы данных появилась после переноса?

Проверьте доступы к базе в конфигурации сайта: на новом хостинге имя базы, пользователь, пароль и сервер обычно другие.

Нужно ли сразу менять хостинг?

Не сразу. Сначала найдите причину: часто помогает кэш, ограничение ботов и перенос тяжёлых задач в cron.

Нужна помощь?

Если не хочется разбираться самому или не получилось — напишите мне. Посмотрю задачу и скажу, что нужно сделать, сколько это займёт и сколько будет стоить.

Ремонт сайтаНаписать в TelegramНаписать в Viber

Leave a comment