502 Bad Gateway — cloudflare
#Кто виноват: Cloudflare или ваш сервер
Cloudflare работает как посредник: посетитель подключается к нему, а он — к вашему серверу (источнику). Страница ошибки показывает, где проблема: если её оформила Cloudflare и есть внизу пометки «Browser — Working / Cloudflare — Working / Host — Error», то отказал именно источник. В 99% случаев причина не в Cloudflare, а в сервере. Обратите внимание на код: 502 — неверный ответ источника; 504 — таймаут; 520 — пустой или неожиданный ответ; 521 — источник отказал в соединении; 522 — таймаут соединения; 523 — источник недоступен; 524 — таймаут ответа; 525/526 — ошибки TLS между Cloudflare и сервером.
#Проверяем сервер без Cloudflare
curl -I --resolve example.com:443:203.0.113.10 https://example.com/Если прямой запрос тоже даёт 502, проблема на сервере. Если сервер отвечает 200, а через Cloudflare ошибка, проверьте файрвол и SSL-режим.
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Файрвол блокирует CloudflareАвтоблокировки (fail2ban, CSF) считают запросы Cloudflare атакой. | 521/522, сервер пингуется. | Разрешите диапазоны Cloudflare (по ссылке выше). |
| Режим SSLВ Cloudflare выбран Full, а на сервере нет сертификата. | 525/526. | Установите сертификат на сервер и включите Full (strict). |
| Лимиты хостингаПревышены процессы. | 502 в часы нагрузки. | Оптимизируйте или смените тариф. |
| Сервер упал или перезагружаетсяНет ответа. | 521/523. | Запустите сервер, проверьте причину сбоя. |
| Приложение зависаетДолгие запросы. | 524, 504. | Оптимизируйте запросы, вынесите долгие задачи в очередь. |
| Неверный IP источникаЗапись A указывает на старый сервер. | Сайт открывается у части пользователей. | Обновите запись DNS в панели Cloudflare. |
#Что проверить на сервере
- Работают ли службыДля администратора собственного сервера: зайдите по SSH и проверьте состояние нужных служб:
systemctl status nginxи, если используется,systemctl status php8.2-fpm(версию PHP замените на реально установленную); не перезапускайте их без выяснения причин. Локально выполнитеcurl -I http://127.0.0.1/и сравните код ответа с запросом через Cloudflare, учитывая заголовок Host и HTTPS. Если приложение не отвечает локально — ищите проблему на origin, а не у посетителя. - Журналы nginx и приложенияАдминистратору: найдите в журнале доступа и ошибок веб-сервера запись, соответствующую точному времени и URL сбоя. На системах с systemd можно начать с
sudo journalctl -u nginx --since "15 minutes ago"(если nginx работает как служба); для файловых логов используйте путь, указанный в конфигурацииaccess_log/error_log. Ищите сообщения подключения к upstream, тайм-ауты и отказ приложения; не меняйте лимиты без подтверждённой причины. Посетителю достаточно записать код и время и обратиться к владельцу. - РесурсыАдминистратору: во время возникновения 502 откройте SSH-терминал и выполните
free -h,df -h,uptime, затем изучите журнал PHP-FPM/приложения. Если в журнале естьserver reached pm.max_children, проверьте число одновременных PHP-процессов и использование памяти перед изменением лимита. Не увеличивайтеpm.max_childrenпроизвольно: при недостатке RAM сервер может начать завершать процессы. Повторите исходный запрос и сравните состояние ресурсов. - ТаймаутыАдминистратору: в журналах nginx, прокси и приложения сопоставьте время начала запроса с моментом обрыва. Если подтверждён тайм-аут, сначала найдите медленный запрос/блокировку в приложении и базе данных; увеличение
proxy_read_timeout/fastcgi_read_timeoutбез устранения причины лишь отложит сбой. Перед правкой сохраните конфигурацию, выполнитеnginx -tи применяйте её только после успешной проверки. Посетителю эти действия не нужны. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Файрвол и SSL
sudo ufw status numberedЧтобы исключить Cloudflare как причину, временно переключите запись DNS в режим «Только DNS» (серое облако) и проверьте сайт напрямую. Если ошибка исчезает, смотрите настройки SSL, файрвол и правила страницы в Cloudflare; если остаётся — проблема на сервере.