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

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

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Apache Error: AH03175: mod_proxy_fcgi: connection timed out waiting for backend Linux / DevOps

Apache Error AH03175: connection timed out waiting for backend — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

Клиент при выполнении запроса видит долгую загрузку страницы, которая завершается ошибкой 504 Gateway Timeout или 503 Service Unavailable. В системном журнале error.log регистрируется истечение таймаута FastCGI-канала: [proxy_fcgi:error] [pid 1234:tid 5678] [client ...] AH03175: mod_proxy_fcgi: connection timed out waiting for backend (/var/run/php/php-fpm.sock).

Узкое местоСимптом в системеПричина таймаута
Пул PHP-FPM переполненСообщения server reached pm.max_childrenВсе воркеры заняты, новый запрос стоит в очереди и отваливается по таймауту
Долгие SQL запросыHigh CPU / Lock в MySQL/PostgreSQLСкрипт завис в ожидании ответа от СУБД
Низкий ProxyTimeoutОбрыв ровно через 30 или 60 секундЗначение таймаута Apache меньше реального времени выполнения скрипта
  • Apache не смог дождаться ответа от службы PHP-FPM за отведенное время.
  • Во время пиков нагрузки сайт полностью перестает отвечать пользователям.
  1. Увеличьте таймаут ожидания бэкенда в конфигурации виртуального хоста Apache:
    # Увеличиваем лимит ожидания до 300 секунд:
    ProxyTimeout 300
    
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
  2. Главная причина — нехватка воркеров PHP-FPM: Откройте файл пула (/etc/php/8.2/fpm/pool.d/www.conf) и увеличьте количество дочерних процессов:
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 10
    pm.min_spare_servers = 5
    pm.max_spare_servers = 20
    pm.max_requests = 1000
    request_terminate_timeout = 300s
  3. Проверьте системный журнал PHP-FPM на наличие предупреждений о перегрузке пула:
    sudo tail -n 50 /var/log/php8.2-fpm.log
  4. Включите медленный лог PHP-FPM (slowlog) для выявления зависающих функций и SQL-запросов:
    slowlog = /var/log/php-fpm-slow.log
    request_slowlog_timeout = 5s
  5. Перезапустите стек сервисов: sudo systemctl reload apache2 && sudo systemctl restart php8.2-fpm.
Расчет pm.max_children: Чтобы не вызвать падение сервера по нехватке памяти (Out of Memory), рассчитывайте pm.max_children по формуле: (Свободная RAM сервера под PHP) / (Средний размер одного процесса PHP). Например: 4096 МБ RAM / 60 МБ = ~68 процессов.
Практический опыт инженера: Если сервер регулярно упирается в AH03175 при выгрузках 1С / CSV-импорте, создайте отдельный pool в PHP-FPM (`/etc/php/8.2/fpm/pool.d/heavy.conf`) с повышенным `request_terminate_timeout` и отдельным сокетом.

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

Чем AH03175 отличается от AH01075?

AH01075 возникает при сбое передачи данных конвейера ввода-вывода (APR bucket brigade), а AH03175 фиксирует чистый сетевой таймаут ожидания первого ответа от FastCGI бэкенда.

Почему увеличение ProxyTimeout не всегда решает проблему?

Если бэкенд завис наглухо из-за блокировки транзакции в БД или бесконечного цикла в коде, увеличение таймаута лишь продлит ожидание пользователя, но не решит причину зависания.

Как проверить количество активных процессов PHP-FPM прямо сейчас?

Выполните команду: pgrep -c php-fpm или используйте ps aux | grep php-fpm | wc -l.

Что делает директива pm.max_requests = 1000?

Она принудительно перезапускает воркер PHP-FPM после обработки каждых 1000 запросов, очищая возможные утечки памяти в PHP-библиотеках.