Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
HTTP_504_GATEWAY_TIMEOUT Linux / DevOps

Траблшутинг Nginx 504 Gateway Timeout: proxy_read_timeout и fastcgi

Обновлено: 21.08.2026
  • Nginx возвращает клиенту HTTP статус 504 Gateway Time-out.
  • В error.log Nginx фиксируется запись: upstream timed out (110: Connection timed out) while reading response header from upstream.
  • Тяжелые SQL-запросы, выгрузки отчетов или сторонние HTTP-вызовы в бэкенде выполняются дольше 60 секунд (тайм-аут по умолчанию).

1. Анализ логов ошибок Nginx

tail -n 50 /var/log/nginx/error.log | grep -E "504|timed out"

2. Тюнинг таймаутов для Proxy Pass (HTTP-бэкенды: Node.js, Go, Python)

Добавьте параметры в блок location или http:

location /api/ {
    proxy_pass http://api_backend;
    proxy_connect_timeout 60s;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
}

3. Тюнинг таймаутов для FastCGI (PHP-FPM)

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
    fastcgi_connect_timeout 60s;
    fastcgi_send_timeout 300s;
    fastcgi_read_timeout 300s;
}

4. Синхронизация лимитов в PHP-FPM / App Server

Увеличение таймаута в Nginx без изменения настроек бэкенда приведет к ошибке 502. В /etc/php/8.2/fpm/pool.d/www.conf:

request_terminate_timeout = 300s

В /etc/php/8.2/fpm/php.ini:

max_execution_time = 300

5. Применение изменений

nginx -t && systemctl reload nginx
systemctl restart php8.2-fpm
Практический опыт инженера: Если 504 возникает массово на всех эндпоинтах, проверьте пул воркеров PHP-FPM/Gunicorn. При исчерпании свободных воркеров (max_children reached) новые запросы встают в очередь и отваливаются по таймауту сокета.

Частые вопросы (FAQ)

В чем разница между ошибками 502 Bad Gateway и 504 Gateway Timeout?

502 указывает, что бэкенд не работает, сбросил соединение или вернул некорректный ответ (TCP RST / ECONNREFUSED). 504 означает, что бэкенд принял запрос, но не успел отправить ответ за время, отведенное директивой proxy_read_timeout / fastcgi_read_timeout.

Является ли увеличение proxy_read_timeout лучшим решением?

Нет, это временная мера. Длительные операции (генерация PDF, экспорт БД) необходимо переносить в асинхронные очереди фоновых задач (Celery, RabbitMQ, Redis Queue).