Другое 524Высокая

Ошибка 524 Cloudflare: 5 способов исправить таймаут и причины

Ошибка 524 означает, что Cloudflare ждал ответ от вашего сервера 100 секунд и не получил его. В статье разбираем ключевые причины — от долгих SQL-запросов до блокировок файрволом — и даём конкретные решения по настройке веб-сервера и приложений.

Обновлено 7 марта 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Cloudflare (бесплатный, Pro, Business тарифы)Исходный веб-сервер: Nginx 1.10+, Apache 2.4+, IIS 10+Приложения: PHP 7.0+, Python (WSGI), Node.js (Express), Ruby (Puma/Unicorn)

Что означает ошибка 524

Ошибка 524 Cloudflare (Cloudflare Timeout) возникает, когда CDN-сервис Cloudflare установил TCP-соединение с вашим исходным сервером (origin), но не получил от него полный HTTP-ответ в течение 100 секунд.

Браузер пользователя отображает:

Error 524: A timeout occurred

А в заголовках ответа видно:

HTTP/1.1 524
Server: cloudflare

Ключевой момент: Cloudflare генерирует эту ошибку до того, как запрос достигает вашего веб-сервера (Nginx, Apache). Проблема не в инфраструктуре Cloudflare, а в том, что ваш сервер либо не начал отвечать вообще, либо ответил слишком медленно.

Схема архитектуры Cloudflare как обратного прокси с таймаутом 100 секунд

Схема архитектуры Cloudflare как обратного прокси с таймаутом 100 секунд

Причины возникновения

  1. Долгий выполнение запроса на бэкенде. Скрипт (PHP, Python, Node.js) или запрос к базе данных выполняется более 100 секунд.
  2. Нехватка ресурсов сервера. Высокая загрузка CPU, нехватка RAM, приводящая к активному своппингу и замедлению всех процессов.
  3. Блокировка со стороны файрвола/WAF. Серверный файрвол (iptables, CSF) или веб-аппликационный файрвол (ModSecurity) отбрасывает или задерживает пакеты от IP-адресов Cloudflare.
  4. Сетевые проблемы. Высокие задержки (latency) или потери пакетов (packet loss) между дата-центром Cloudflare и вашим сервером.
  5. Слишком низкие таймауты в конфигурации. Значения proxy_read_timeout, fastcgi_read_timeout (nginx) или ProxyTimeout (Apache) установлены менее 100 секунд, и сервер сам разрывает соединение.
  6. "Заморозка" процесса приложения. Процесс PHP-FPM, Gunicorn или Puma завис в ожидании внешнего ресурса (API, БД) и не может завершить запрос.

Способы решения

Шаг 1: Диагностика с помощью curl и Cloudflare

Сначала подтвердите, что проблема именно в таймауте Cloudflare.

  1. Временно отключите Cloudflare. В панели Cloudflare для домена переведите иконку облачка в положение DNS Only (серое). Если сайт заработает — проблема точно в слое Cloudflare/сети.
  2. Измерьте время ответа напрямую к серверу. Обращайтесь к серверу по его IP-адресу или домену, который указывает прямо на сервер (не через Cloudflare).
    curl -o /dev/null -s -w "time_total: %{time_total}\n" http://IP_СЕРВЕРА/проблемный-путь
    
    Если time_total приближается к 100 секундам или превышает её — проблема в производительности бэкенда.

Шаг 2: Анализ логов и мониторинг ресурсов

Найдите конкретный запрос или процесс, вызывающий таймаут.

  1. Логи веб-сервера. Для Nginx ищите upstream timed out или gateway timeout:
    tail -f /var/log/nginx/error.log | grep -E "(upstream timed out|gateway timeout)"
    
    Для Apache проверяйте error_log.
  2. Логи приложения. Для PHP-FPM:
    tail -f /var/log/php-fpm/error.log
    
    Для Python (Gunicorn) или Node.js смотрите логи systemd или консоли.
  3. Мониторинг в реальном времени. Установите htop или glances и наблюдайте за загрузкой CPU, RAM и количеством процессов в момент ошибки:
    htop
    

Шаг 3: Оптимизация медленного кода и запросов

Если проблема в конкретном скрипте (например, report.php или /api/analytics):

  1. Профилируйте запрос. Используйте Xdebug/Blackfire для PHP, cProfile для Python, clinic.js для Node.js.
  2. Оптимизируйте запросы к БД. Для медленных SQL-запросов выполните EXPLAIN ANALYZE, добавьте недостающие индексы, перепишите сложные JOIN.
  3. Внедрите кэширование. Результаты тяжёлых вычислений или запросов кешируйте в Redis или Memcached. Пример для PHP (Predis):
    <?php
    $redis = new Predis\Client();
    $cacheKey = 'heavy_report_data';
    $data = $redis->get($cacheKey);
    if (!$data) {
        $data = generateHeavyReport(); // Функция, выполняющаяся >100s
        $redis->setex($cacheKey, 3600, serialize($data));
    }
    echo $data;
    
  4. Выносите долгие операции в очередь. Отправку email, генерацию отчётов, обработку изображений перенесите в асинхронные задачи (RabbitMQ, Beanstalkd, Celery, Sidekiq). Веб-запрос должен возвращать ответ быстро, а тяжёлая работа выполняется фоном.

Шаг 4: Настройка таймаутов веб-сервера и приложения

Убедитесь, что все таймауты в цепочке превышают 100 секунд, иначе сервер прервёт запрос раньше Cloudflare.

Для Nginxnginx.conf или конфиге сайта):

location ~ \.php$ {
    fastcgi_pass   php-fpm:9000;
    fastcgi_read_timeout 120;   # Основной таймаут чтения ответа от FastCGI
    fastcgi_connect_timeout 120; # Таймаут установки соединения
}

Также проверьте proxy_read_timeout, если используется прокси.

Для PHP (php.ini или .user.ini):

max_execution_time = 120    ; Макс. время выполнения скрипта
max_input_time = 120        ; Макс. время на parsing входных данных

Для Apache (в конфиге виртуального хоста или .htaccess):

# Если используется mod_proxy
ProxyTimeout 120

# Если используется mod_php
php_value max_execution_time 120

Для Node.js (Express):

const timeout = require('connect-timeout');
app.use(timeout('120s')); // Middleware, прерывающий запросы дольше 120s

После изменений перезапустите сервисы:

sudo systemctl restart nginx php-fpm
# или для Apache
sudo systemctl restart apache2
Примеры настроек таймаутов в nginx, apache и php для исправления ошибки 524

Примеры настроек таймаутов в nginx, apache и php для исправления ошибки 524

Шаг 5: Проверка сетевой доступности и файрвола

Cloudflare использует фиксированные диапазоны IP-адресов. Если ваш файрвол их блокирует, соединение оборвётся.

  1. Разрешите IP-адреса Cloudflare. Скачайте актуальные списки с cloudflare.com/ips и добавьте в правила файрвола. Пример для iptables с использованием ipset (рекомендуется):
    # Создаём set для IPv4
    ipset create cloudflare hash:ip
    # Загружаем и добавляем IPv4-адреса
    curl -s https://www.cloudflare.com/ips-v4 | while read ip; do ipset add cloudflare $ip; done
    # Разрешаем трафик от Cloudflare на порты 80/443
    iptables -A INPUT -p tcp --dport 80 -m set --match-set cloudflare src -j ACCEPT
    iptables -A INPUT -p tcp --dport 443 -m set --match-set cloudflare src -j ACCEPT
    
    Для firewalld или CSF используйте соответствующие команды добавления сети/IP.
  2. Проверьте логи файрвола на предмет отбрасывания пакетов от Cloudflare:
    sudo grep -i "cloudflare" /var/log/iptables.log
    sudo tail -f /var/log/fail2ban.log
    
  3. Проверьте сетевое качество. С вашего сервера выполните ping и traceroute до любого IP Cloudflare (например, 172.67.134.212):
    ping -c 4 172.67.134.212
    traceroute 172.67.134.212
    
    Стабильные значения ping (< 100 мс) и отсутствие потерь пакетов (0% packet loss) — хороший знак.

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

  1. Регулярный аудит производительности. Включите slow_query_log в MySQL/PostgreSQL. Используйте APM-инструменты (New Relic, Datadog, Scout) для выявления медленных эндпоинтов.
  2. Настройте мониторинг времени ответа. В Zabbix, Prometheus или UptimeRobot задайте алерт при времени отклика (response time) > 30 секунд.
  3. Кэшируйте на всех уровнях. Используйте Cache-Control заголовки, кэшируйте целые страницы (Varnish) или фрагменты (Redis, Memcached) на уровне приложения.
  4. Устанавливайте лимиты на пользовательские запросы. Для API используйте rate limiting (например, через nginx limit_req_zone) и таймауты на уровне кода, чтобы один "тяжёлый" запрос не мог заблокировать воркер.
  5. Содержите ПО в актуальном состоянии. Устаревшие версии PHP, Node.js или библиотек могут иметь утечки памяти или известные проблемы с производительностью.
  6. Проводите нагрузочное тестирование. Перед развертыванием новых функций тестируйте их под пиковую нагрузку с помощью JMeter, k6 или Locust, чтобы оценить время ответа.

Часто задаваемые вопросы

Чем ошибка 524 отличается от 504 Gateway Timeout?
Можно ли увеличить лимит ожидания в Cloudflare?
Сервер отвечает за 5 секунд, но Cloudflare всё равно показывает 524. Почему?
Как проверить, что проблема именно в Cloudflare, а не в DNS?

Полезное

Проверьте время ответа сервера напрямую
Проанализируйте логи сервера и приложения
Оптимизируйте долгие запросы и добавьте кэширование
Увеличьте таймауты на сервере и в приложении
Разрешите IP-адреса Cloudflare в файрволе

Эта статья помогла вам решить проблему?