У меня есть Apache2 с PHP + PHP-FPM, настроенный в соответствии с:
http://wiki.apache.org/httpd/PHP-FPM
Я пишу сценарий, выполнение которого на внутреннем Vhost займет много времени, но время ожидания истекает, все работает без сбоев, если сценарий выполняется менее чем за 30 секунд.
Мой журнал Apache говорит мне:
[Wed Apr 17 21:57:23.075175 2013] [proxy_fcgi:error] [pid 9263:tid 140530454267648] (70007)The timeout specified has expired: [client 58.169.202.172:49017] AH01075: Error dispatching request to :, referer:
При попытке запустить скрипт мне дают 503 Service Unavailable
ровно 30 секунд времени выполнения. Логически это означало бы, что у меня есть директива тайм-аута или настройка, установленная на 30 секунд, но они есть в конфигурации моего Vhost:
Timeout 600
<IfModule proxy_module>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9001/home/pyrokinetiq/scripts/$1 timeout=600
ProxyTimeout 600
</IfModule>
(php-fpm работает на порте 9001 для меня)
Я также попытался поместить Timeout
и ProxyTimeout
в httpd.conf
без разницы.
Кажется, есть другое время ожидания где-то определенное mod_proxy_fcgi
, но я не могу его найти. Я установил Apache2 httpd из официального архива, кажется, что ни один из модов не поставляется с какими-либо конфигурационными файлами.
Если кто-нибудь может указать мне правильное направление, это будет очень цениться.
источник
Я хотел отметить, что хотя этот ответ отлично работает для более старых версий, он ломается в последних версиях Apache 2.4 с кодом ошибки AH00526.
ProxyPass
иProxyPassMatch
или<Proxy>
и<ProxyMatch>
не могут использоваться вместе в пределах одного и того же имени работника. Раньше все работало нормально, поэтому не знаю, было ли это изменено в дизайне или это ошибка.В любом случае вы можете исправить это, используя только ProxyPassMatch с параметром timeout = 120 (или любым другим желаемым значением), например:
источник
У меня есть Apache 2.4.6, но патч для его исправления представлен в Apache> = 2.4.8. Ключевым моментом здесь является немедленный запуск вывода, чтобы Apache (mod_proxy_fcgi) решил, что соединение активно.
Например, я использую PHP, и запрос БД для моего вызова AJAX занимает> 30 секунд. Поскольку я знаю, что общий ответ будет «Content-Type: application / json», я немедленно отправляю этот заголовок.
источник
Не должно ли это быть:
Убедитесь, что для параметра php.ini max_execution_time также установлено значение 600. (проверьте phpinfo () на странице в реальном времени, чтобы убедиться, что вы видите фактическое используемое значение)
Как сказала Дженни, установите настройку php-fpm
(обратите внимание на s в конце)
Там не так много, чтобы настроить с самим mod_proxy_fcgi, как вы можете видеть на странице apache. http://httpd.apache.org/docs/current/mod/mod_proxy_fcgi.html
Также включите ведение журнала отладки php-fpm, чтобы вы могли видеть, где оно истекло. http://php-fpm.org/wiki/Configuration_File (также включите catch_workers_output)
И включите ведение журнала уровня отладки для модулей mod_proxy и mod_proxy_fcgi, так как вы используете apache 2.4. Очень хорошая функция, включите только те модули, которые вам нужны: http://httpd.apache.org/docs/current/mod/core.html#loglevel
Если это не помогло, опубликуйте свой конфигурационный файл php-fpm.
В крайнем случае, может быть, какой-нибудь демон убивает длительный процесс?
источник
Я заметил, что вы используете PHP-FPM. Я тоже им пользуюсь, но с Apache 2.4.6.
Если предположить , что проблема существует в течение некоторого времени, это , кажется , что значение тайм - аута для
mod_proxy_fcgi
будет жёстко . Я написал то, что я нашел здесьисточник
Поскольку вы исправили настройки тайм-аута в apache, это не должно быть проблемой. Второе место для поиска - любое сетевое оборудование, но поскольку вы используете прокси-сервер на свой собственный сервер, это также маловероятно. Таким образом, оставшееся место для поиска находится на бэкэнд-сервере.
Ih файл конфигурации для php-pfm, ищите
Это значение должно быть таким же, как и немного ниже, настройки тайм-аута в apache.
источник
request_terminate_timeout
значение 400, но все еще без изменений :( У меня такое ощущение, что мне нужно что-то установитьmod_proxy_fcgi
, но, похоже, оно не входит ни в какие файлы конфигурации.В дополнение к таймауту установите enablereuse = off. Я обнаружил, что при выполнении некоторых запросов долго выполняющиеся сценарии будут работать правильно, а другие будут убиты рано.
источник
Этот пост изменил всю сделку для меня.
Добавьте следующие строки в ваш файл httpd.conf :
источник