
Ошибка 524 (A Timeout Occurred) означает, что Cloudflare подключился к серверу сайта и передал ему запрос, но не получил HTTP-ответ за отведённое время — по текущей документации это 125 секунд. Сервер при этом жив: он просто слишком долго считает отчёт, ждёт базу данных или перегружен. Исправлять ошибку должен владелец сайта, посетителю остаётся подождать и повторить позже.
На странице ошибки видна схема из трёх звеньев: браузер «Working», Cloudflare «Working», хост «Error», а внизу — Ray ID, номер запроса для поиска в логах. Ошибка 524 в Роблоксе — другая ошибка, к сайтам и Cloudflare она не относится.
Что значит ошибка 524
Когда сайт подключён к Cloudflare в режиме проксирования (оранжевое облако в DNS), между посетителем и вашим сервером появляются два отдельных соединения: браузер — узел Cloudflare и узел Cloudflare — ваш сервер (origin). Код 524 рождается на втором участке. Cloudflare установил TCP-соединение, отправил запрос, сервер его принял — и замолчал дольше, чем позволяет лимит Proxy Read Timeout.
В таблице лимитов соединений Cloudflare этот таймаут сейчас равен 125 секундам. Во многих статьях до сих пор фигурирует цифра 100 секунд — это значение из более старой версии документации. На бесплатном, Pro и Business тарифах лимит не настраивается, на Enterprise его можно поднять до 6000 секунд.
Есть второй, менее известный источник того же кода: Proxy Write Timeout. Если Cloudflare не успевает за 30 секунд передать на ваш сервер тело запроса (например, при загрузке большого файла на медленный или перегруженный origin), посетитель тоже увидит 524. Этот лимит не меняется ни на каком тарифе.
Важное следствие: посетитель видит ошибку, но ваш сервер, скорее всего, продолжает выполнять запрос — импорт дойдёт до конца, заказ создастся. Поэтому повторное нажатие кнопки после 524 нередко даёт дубли.
Почему возникает ошибка 524
Коротко — запрос работает дольше 125 секунд. Причины, которые встречаются на практике чаще всего:
- Долгая операция внутри HTTP-запроса. Выгрузка каталога в CSV или YML, формирование отчёта за год, импорт товаров, резервная копия из админки, пакетная обработка изображений.
- Медленный запрос к базе данных. Нет индекса, полный перебор большой таблицы, блокировка строк другой транзакцией.
- Внешний сервис без таймаута. Скрипт обращается к API платёжного шлюза, CRM или обмену с 1С, внешняя сторона зависла, а у HTTP-клиента не задан лимит ожидания — и ваш сервер ждёт вместе с ним.
- Перегрузка сервера. Все процессы PHP-FPM или воркеры приложения заняты, новый запрос стоит в очереди. Сама страница лёгкая, но до неё просто не доходит очередь. Типичный триггер — наплыв ботов, рассылка или распродажа.
- Слишком щедрые таймауты на самом сервере. Если
fastcgi_read_timeout,proxy_read_timeoutв nginx иmax_execution_timeв PHP подняты до 300–600 секунд, сервер честно ждёт скрипт, а Cloudflare обрывает ожидание раньше.
Как сузить причину по симптомам
| Что наблюдаете | Вероятная причина | Куда смотреть |
|---|---|---|
| 524 только на одном адресе (экспорт, отчёт, импорт) | Долгая операция в запросе | Код обработчика, медленные SQL-запросы |
| 524 на любых страницах, в том числе на лёгких | Сервер перегружен, запросы стоят в очереди | Загрузка CPU, лог PHP-FPM, число процессов |
| 524 в одно и то же время суток | Cron, бэкап или обмен с 1С забирают ресурсы | Расписание cron, логи заданий |
| 524 при оплате или отправке формы | Внешний API отвечает медленно или завис | Таймауты HTTP-клиента, лог интеграции |
| 524 при загрузке больших файлов | Сервер не принимает тело запроса за 30 секунд | Канал до сервера, client_max_body_size, буферизация |
Ошибка 524: что делать, если вы посетитель
Проблема находится между Cloudflare и сервером сайта, поэтому очистка кеша браузера, смена DNS или перезагрузка роутера здесь не помогут — ваша часть цепочки на схеме подписана «Working». Разумные действия такие:
- Подождите несколько минут и обновите страницу. Если сервер был перегружен кратковременно, ошибка уйдёт сама.
- Не отправляйте форму и не нажимайте «Оплатить» повторно сразу. Сначала проверьте почту, личный кабинет или историю платежей: действие могло выполниться, несмотря на ошибку.
- Если ошибка держится, сообщите владельцу сайта время и Ray ID со страницы ошибки. Глобальный сбой Cloudflare легко исключить по официальной странице статуса, но для 524 он нехарактерен: ошибка почти всегда на стороне конкретного сайта.
Как исправить ошибку 524 на своём сайте
Порядок работы: найти запрос, который не укладывается в лимит, понять, почему он долгий, и ускорить его или вынести из HTTP-запроса.
Шаг 1. Найдите медленный запрос в логах
Стандартный формат access-лога nginx не пишет время обработки. Добавьте его и заодно Ray ID, чтобы сопоставлять записи с жалобами посетителей:
# /etc/nginx/nginx.conf, внутри блока http
log_format timed '$remote_addr [$time_local] "$request" $status '
'$request_time $upstream_response_time "$http_cf_ray"';
# в нужном server-блоке
access_log /var/log/nginx/access_timed.log timed;
После nginx -t и systemctl reload nginx отберите запросы дольше минуты — время обработки стоит третьим полем с конца строки:
awk '$(NF-2) > 60' /var/log/nginx/access_timed.log | tail -n 20
Характерный след ошибки 524 в логе nginx — статус 499 у долгих запросов: так nginx помечает случаи, когда клиент (здесь это Cloudflare) закрыл соединение, не дождавшись ответа. Подробнее о форматах и расположении файлов — в статье про логи nginx.
Шаг 2. Замерьте ответ сервера в обход Cloudflare
Нужно понять, сколько думает сам origin, без прокси. Опция --resolve отправляет запрос прямо на IP сервера, сохраняя правильное имя хоста. Флаг -k нужен, если на сервере стоит сертификат Cloudflare Origin CA — curl ему не доверяет.
# Linux / macOS
curl -sk -o /dev/null \
-w "code=%{http_code} ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
--resolve example.com:443:203.0.113.10 https://example.com/admin/export
В Windows 10 и 11 curl встроен. В PowerShell вызывайте именно curl.exe, иначе сработает псевдоним Invoke-WebRequest:
curl.exe -sk -o NUL -w "code=%{http_code} ttfb=%{time_starttransfer}s\n" --resolve example.com:443:203.0.113.10 https://example.com/admin/export
ttfb — время до первого байта. Если оно подбирается к 125 секундам, причина подтверждена: не успевает сам сервер.
Шаг 3. Посмотрите, чем занят сервер
Для PHP-сайтов самый полезный инструмент — slow log пула PHP-FPM: он записывает стек вызовов скрипта, который выполняется дольше заданного порога. Параметры описаны в документации PHP-FPM:
; файл пула, например /etc/php/8.3/fpm/pool.d/www.conf
request_slowlog_timeout = 10s
slowlog = /var/log/php8.3-fpm-slow.log
Там же проверьте, не упирается ли пул в лимит процессов. Сообщение server reached pm.max_children setting в основном логе PHP-FPM означает, что новые запросы стоят в очереди. Путь к логу зависит от дистрибутива и версии PHP:
grep -i "max_children" /var/log/php8.3-fpm.log | tail -n 5
В MySQL и MariaDB зависшие запросы видны в SHOW FULL PROCESSLIST;, а медленные можно собрать временным включением slow log:
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;
SHOW VARIABLES LIKE 'slow_query_log_file';
Если обработчик ходит во внешние API, задайте HTTP-клиенту таймаут (в PHP — CURLOPT_TIMEOUT): зависание чужого сервиса не должно подвешивать ваш.
Шаг 4. Вынесите долгую работу из HTTP-запроса
Это основное лечение, его рекомендует и сама Cloudflare. Вместо того чтобы держать соединение открытым, пока формируется отчёт, запрос только ставит задачу и сразу отвечает:
- Пользователь нажимает «Выгрузить». Сервер кладёт задачу в очередь и за доли секунды возвращает
202 Acceptedс идентификатором задачи. - Фоновый обработчик (воркер очереди или задание cron) выполняет работу столько, сколько нужно, — лимиты Cloudflare его не касаются.
- Страница раз в несколько секунд опрашивает адрес вида
/jobs/123/statusи показывает прогресс. - Когда задача готова, пользователь получает ссылку на файл или письмо.
Готовые механизмы есть почти в любом стеке: очереди Laravel, Symfony Messenger, Celery, BullMQ. На WordPress тяжёлые операции удобнее запускать через WP-CLI по SSH, в 1С-Битрикс — агентами на cron.
Шаг 5. Для тяжёлых операций — поддомен без проксирования
Если админские выгрузки неизбежно долгие, их можно перенести на отдельный поддомен, например ops.example.com, и в разделе DNS панели Cloudflare переключить его запись в режим DNS only (серое облако). Запросы к нему пойдут напрямую на сервер, и лимит 125 секунд перестанет действовать. Цена решения:
- IP сервера становится публичным. Закройте поддомен списком разрешённых адресов или авторизацией, иначе вы открываете обходной путь мимо защиты Cloudflare.
- Сертификат для поддомена нужен свой, публично доверенный (например, Let’s Encrypt): сертификат Cloudflare на узлах сети здесь не участвует, а Origin CA браузеры не принимают.
Шаг 6. Отдавайте ответ по частям, если задача это позволяет
Если результат формируется построчно (большой CSV), его можно отдавать потоком: заголовки уходят сразу, данные — по мере готовности. Буферизацию нужно отключить на всём пути: flush() в PHP, fastcgi_buffering off; или заголовок X-Accel-Buffering: no в nginx. Проверьте поведение через Cloudflare на тестовом адресе, прежде чем полагаться на этот способ.
Шаг 7. Enterprise: увеличить Proxy Read Timeout
На тарифе Enterprise лимит поднимается до 6000 секунд — через правило Cache Rules с настройкой Proxy Read Timeout или через API для всей зоны. Это описано в разделе документации Cloudflare об ошибке 524. На остальных тарифах такой настройки нет.
Что не поможет
Увеличение fastcgi_read_timeout, proxy_read_timeout или max_execution_time выше 125 секунд ошибку не уберёт: сервер будет готов ждать, а Cloudflare — нет. Полезнее обратное: держать таймауты origin чуть ниже лимита Cloudflare — тогда зависший запрос остановит ваш nginx с кодом 504 и понятной записью в error.log. Приостановка Cloudflare (Pause Cloudflare on Site) годится только для диагностики.
Ошибки Cloudflare 520, 521, 522, 523, 524, 525, 526: таблица
Все коды из диапазона 52x Cloudflare генерирует сама, когда что-то идёт не так на участке между её сетью и вашим сервером. В стандарте HTTP их нет. Отличаются они тем, на каком этапе оборвалось общение:
| Код | Текст на странице | Что произошло | Где искать причину |
|---|---|---|---|
| 520 | Web server is returning an unknown error | Сервер вернул пустой, непонятный или обрезанный ответ | Падения веб-сервера и PHP, заголовки больше 128 КБ, настройки HTTP/2 на origin |
| 521 | Web server is down | Сервер отказал в соединении | Веб-сервер не запущен или файрвол блокирует IP Cloudflare |
| 522 | Connection timed out | TCP-соединение не установилось за 19 секунд или сервер не подтвердил запрос | Перегрузка, файрвол, сетевые потери |
| 523 | Origin is unreachable | Cloudflare не может найти маршрут до сервера | Неверный IP в записи A/AAAA, маршрутизация |
| 524 | A timeout occurred | Соединение есть, запрос принят, ответа нет 125 секунд | Долгие скрипты, база данных, очередь запросов |
| 525 | SSL handshake failed | Не удалось TLS-рукопожатие между Cloudflare и сервером | Протоколы и шифры, SNI, порт 443 на origin |
| 526 | Invalid SSL certificate | В режиме Full (strict) сертификат origin не прошёл проверку | Срок, имя в сертификате, неполная цепочка |
По 522 и 525 есть отдельные разборы: ошибка 522 Connection Timed Out и ошибка 525 SSL Handshake Failed.
Ошибка 520: что означает
Код ошибки 520 — «всё остальное»: сервер ответил так, что Cloudflare не смог разобрать ответ. Частые виновники — упавший посреди ответа процесс PHP, сброс соединения файрволом, огромные заголовки из-за десятков cookie, некорректный HTTP/2 на origin (помогает отключение HTTP/2 to Origin в настройках Speed). Начинайте с error.log веб-сервера.
Ошибка 521: веб-сервер не работает
521 — сервер отказал в подключении: веб-сервер остановлен (проверьте systemctl status nginx) или файрвол блокирует адреса Cloudflare. Разрешите диапазоны IP Cloudflare и проверьте, что сервер слушает нужный порт: 80 в режиме Flexible, 443 в режимах Full и Full (strict).
Чем 524 отличается от 504
Оба кода про таймаут, но выдают их разные звенья. 504 Gateway Timeout отдаёт ваш собственный прокси (обычно nginx перед PHP-FPM или приложением), когда бэкенд не ответил в пределах его таймаута, по умолчанию 60 секунд. 524 выдаёт Cloudflare, когда молчит весь ваш сервер. Если на странице Cloudflare стоит код 504, а не 524, чаще всего это значит, что таймаут сработал на вашем nginx, а Cloudflare лишь показал его ответ в своём оформлении. Разбор 504 — в статье 504 Gateway Timeout.
Как проверить, отвечает ли сайт и сколько он думает
- Проверка HTTP-заголовков покажет код ответа, время ответа и заголовки. Наличие
server: cloudflareиcf-rayподтверждает, что трафик идёт через прокси. - DNS-запросы покажут, какие записи проксируются, а какие ведут прямо на сервер, — это нужно и при ошибке 523.
- Мониторинг сайта проверяет адрес по расписанию, хранит историю времени ответа и присылает уведомление о кодах 5xx — рост времени ответа виден раньше, чем он превратится в 524.
Чтобы отличить проблему сайта от проблемы своего подключения, пригодится чек-лист как проверить, работает ли сайт.
Частые вопросы
Ошибка 524 — это сбой Cloudflare?
Нет. Cloudflare лишь сообщает, что ваш сервер не ответил вовремя. Сеть Cloudflare при этом работает, на схеме ошибки она отмечена как «Working».
Сколько Cloudflare ждёт ответа перед ошибкой 524?
125 секунд на получение ответа и 30 секунд на передачу тела запроса на сервер. Первый лимит настраивается только на Enterprise, до 6000 секунд, второй не меняется.
Почему 524 появляется только в админке?
Там живут тяжёлые операции: импорт, экспорт, пересчёт цен, резервное копирование. Их нужно переводить в фоновые задачи или на поддомен без проксирования.
Можно ли просто отключить Cloudflare?
Временно — для проверки, что без прокси запрос проходит. Как постоянное решение это плохая идея: вы теряете защиту и кеширование, а медленный запрос никуда не девается и будет упираться в таймауты вашего же сервера.
Выполнился ли мой запрос, если я увидел 524?
Часто да: сервер продолжает работу после того, как Cloudflare перестал ждать. Прежде чем повторять оплату или отправку формы, проверьте результат в личном кабинете или почте.