#php #apache #mod-fastcgi
#php #apache #мод-fastcgi
Вопрос:
Я настроил несколько версий PHP под Apache в Windows, используя mod_fcgid. Конфигурация такая:
LoadModule fcgid_module modules/mod_fcgid.so
FcgidInitialEnv SystemRoot "C:/Windows"
FcgidInitialEnv SystemDrive "C:"
FcgidInitialEnv TEMP "c:/php/tmp"
FcgidInitialEnv TMP "c:/php/tmp"
FcgidInitialEnv windir "C:/WINDOWS"
FcgidIOTimeout 600
FcgidConnectTimeout 600
FcgidProcessLifeTime 3600
FcgidMaxRequestsPerProcess 900
FcgidMaxProcesses 10
FcgidMaxRequestLen 80131072
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
И затем определенный обработчик fcgi в каждой директиве vhost:
<Virtualhost *:80>
VirtualDocumentRoot "e:/hosts/example"
ServerName example.local
# location of php.ini
FcgidCmdOptions c:/php/php5.5.12/php-cgi.exe InitialEnv PHPRC="c:/php/php5.5.12/"
FcgidWrapper "c:/php/php5.5.12/php-cgi.exe" .php
</Virtualhost>
<Virtualhost *:81>
VirtualDocumentRoot "e:/hosts/example"
ServerName example.local
# location of php.ini
FcgidCmdOptions c:/php/php7.0.12/php-cgi.exe InitialEnv PHPRC="c:/php/php5.5.12/"
FcgidWrapper "c:/php/php7.0.12/php-cgi.exe" .php
</Virtualhost>
Таким образом http://example.local / работает с PHP 5.5, но http://example.local:81 / обслуживает один и тот же код, но с PHP 7.0. Очень удобно для тестирования нескольких версий PHP в одной системе.
Но я продолжаю получать тайм-ауты fcgi примерно через 40-60 секунд, что мешает мне эффективно использовать xdebug.
Я проверил ряд похожих вопросов по SO, большинство из которых корректно предлагают установить более высокое значение FcgidIOTimeout
параметра, но по неизвестной причине это абсолютно не влияет на мою систему.
Ответ №1:
Я отвечаю на свой собственный вопрос, надеясь, что это сэкономит кому-то часы борьбы с этой проблемой.
Потратив на это довольно много времени, я понял, что виновник был в использовании FcgidCmdOptions
в конфигурации vhost. Если это определено, глобальные параметры fcgid просто игнорируются! Итак, вместо настройки FcgidIOTimeout
мне пришлось установить IOTimeout
опцию в FcgidCmdOptions
.
Окончательная конфигурация следующая:
<Virtualhost *:80>
VirtualDocumentRoot "e:/hosts/example"
ServerName example.local
FcgidCmdOptions c:php/php5.5.12/php-cgi.exe
InitialEnv PHPRC="c:php/php5.5.12/"
InitialEnv PHP_FCGI_MAX_REQUESTS=1000
IOTimeout 3600
ConnectTimeout 3600
MaxProcessLifeTime 7200
IdleTimeout 3600
MaxRequestsPerProcess 900
FcgidWrapper "c:php/php5.5.12/php-cgi.exe" .php
</Virtualhost>
<Virtualhost *:81>
VirtualDocumentRoot "e:/hosts/example"
ServerName example.local
FcgidCmdOptions c:php/php7.0.12/php7-cgi.exe
InitialEnv PHPRC="c:php/php7.0.12/"
InitialEnv PHP_FCGI_MAX_REQUESTS=1000
IOTimeout 3600
ConnectTimeout 3600
MaxProcessLifeTime 7200
IdleTimeout 3600
MaxRequestsPerProcess 900
FcgidWrapper "c:php/php7.0.12/php7-cgi.exe" .php
</Virtualhost>