Назад | Перейти на главную страницу

Тайм-аут Apache 2.4 и PHP-FPM из-за того, что я не могу найти

Итак, я ищу причину, по которой я продолжаю получать тайм-ауты на моем сервере Apache 2.4 с PHP-FPM. Вот ошибка:

[proxy_fcgi:error] [pid ###] (70007)The timeout 
specified has expired:[client XXXXXXXX] AH01075 : 
Error dispatching request to:, referer: http://address

В следующих файлах конфигурации я играл с каждым показываемым таймаутом. У меня в fpm два пула:

[www]
;user and group info and listening ip and such up here
access_log = /path/to/access.log
request_terminate_timeout = 15
php_admin_value[error_log] = /path/to/error.log
php_admin_flag[log_errors] = on

и второй:

[app]
;user and group info and listening ip and such up here
access_log = /path/to/access.log
request_terminate_timeout = 300
php_admin_value[error_log] = /path/to/error.log
php_admin_flag[log_errors] = on

и мой php.ini:

max_execution_time = 300
max_input_time = 300
default_socket_timeout = 300

Итак, моя конфигурация Apache:

Timeout 80 
<FilesMatch "^(some | names | of | files)\.php$">
    SetHandler "proxy:fcgi://123.45.5.67:7891"
</FilesMatch>

<FilesMatch "^!(some | names | of | files)\.php$">
    SetHandler "proxy:fcgi://123.45.5.67:5432"
</FilesMatch>

Очевидно, что в httpd.conf намного больше, но таймауты не указаны (за исключением несвязанного ProxyPass, установленного на 300 секунд). Я прочитал эту ветку: https://unix.stackexchange.com/questions/270655/how-to-find-and-edit-apache-timeout, но я проверял наши патчи с rpm -q --changelog httpd | less, и есть исправление для этой ошибки. Таймауты также были намного более хаотичными, когда у меня был только один пул. От 24 секунд до 6,7 минут (при сниженной скорости загрузки 5 Кб / с; не проблема с кодом, тестировалось целенаправленно). Какое-то время казалось, что это связано с request_terminate_timeout, но эта корреляция умерла.

Спасибо за любую помощь.

Итак, оказывается, что это как-то связано со скоростью газа. Он был настолько низким, что время ожидания запроса истекло. Я исправил это, изменив RequestReadTimeout:

RequestReadTimeout header=20-120,MinRate=50 body=20,MinRate=50

Обратите внимание, что это также полезно, если трафик от пользователей проходит через прокси или брандмауэр, прежде чем попасть на ваш сервер. Время между запросом и данными может быть значительным.