Ошибки 502, 503, 504 и «ошибка базы данных»: разбор для владельца сайта
Ошибки с кодами 502, 503 и 504 пугают владельцев, но на самом деле они довольно точно указывают, где искать проблему. Все три говорят о том, что веб-сервер работает, но не смог получить ответ от того, что генерирует страницу. А «Ошибка установки соединения с базой данных» — о том, что сайт не может достучаться до MySQL. Разберу каждую ошибку и порядок действий.
Как устроен запрос к сайту
Чтобы понять ошибки, полезна простая схема:
- Браузер обращается к веб-серверу (nginx или Apache).
- Веб-сервер передаёт запрос PHP (обычно PHP-FPM).
- PHP выполняет код CMS и обращается к базе данных MySQL или MariaDB.
- Ответ возвращается по цепочке обратно.
Каждая ошибка соответствует обрыву на определённом участке этой цепочки.
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 не запущен или упал из-за нехватки памяти или места на диске.
- Превышено количество соединений к базе.
- Повреждённые таблицы после сбоя.
Что проверить
- Доступы в конфигурации сайта сравнить с данными базы в панели хостинга.
- Зайти в phpMyAdmin с теми же доступами — если не пускает, проблема в доступах или самом MySQL.
- На своём сервере — статус MySQL, свободное место на диске и лог.
systemctl status mariadb
df -h
- Если таблицы повреждены — восстановить. В 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
- Код ошибки и время появления.
- Лог ошибок веб-сервера и PHP-FPM.
- Файл .maintenance в корне.
- Нагрузка и лимиты в панели хостинга.
- Всплески запросов от ботов в логе доступа.
- Долгие задачи и внешние API.
- Доступность и место для MySQL.
- Кэш страниц и оптимизация запросов.
Частые вопросы
Ошибка 503 появляется ночью. Что это?
Чаще всего тяжёлые cron-задачи: резервное копирование, обмен с 1С, генерация карты сайта. Сопоставьте время с расписанием задач.
Может ли ошибку вызвать большое количество посетителей?
Да, если сайт без кэша и упирается в лимиты процессов. Реальные посетители редко создают такую нагрузку — чаще это боты.
Что делать, если ошибка базы данных появилась после переноса?
Проверьте доступы к базе в конфигурации сайта: на новом хостинге имя базы, пользователь, пароль и сервер обычно другие.
Нужно ли сразу менять хостинг?
Не сразу. Сначала найдите причину: часто помогает кэш, ограничение ботов и перенос тяжёлых задач в cron.
Нужна помощь?
Если не хочется разбираться самому или не получилось — напишите мне. Посмотрю задачу и скажу, что нужно сделать, сколько это займёт и сколько будет стоить.
