Итак, я ищу причину, по которой я продолжаю получать тайм-ауты на моем сервере 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
Обратите внимание, что это также полезно, если трафик от пользователей проходит через прокси или брандмауэр, прежде чем попасть на ваш сервер. Время между запросом и данными может быть значительным.