apo*_*fos 9 php apache mod-fastcgi
我们最近迁移到了PHP-FPM.但是我们遇到了一些长时间运行的脚本的问题.代码看起来大致如下:
foreach ($items as $item) {
set_time_limit(30);
proccessThatTakesAround2secs();
}
Run Code Online (Sandbox Code Playgroud)
正常的PHP脚本时间限制也是30秒.之前工作正常,因为我们将每个项目的剩余时间限制重新设置为30秒.大约有1000个项目,这意味着该脚本通常需要大约30分钟才能完成.但是我们已经达到了以下问题:
FastCGI:comm与服务器"/usr/local/php-5.6.24/sbin/php5-fpm"中止:空闲超时(30秒)
现在我的问题是,将空闲超时增加到一个小时是否明智但仍然确保PHP脚本运行时间不超过30秒,除非我们使用set_time_limit?有没有办法在每个脚本的基础上设置空闲超时(类似于set_time_limit?)
这是我们的池配置:
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = static
pm.max_children = 55
pm.max_requests = 10000
php_value[memory_limit] = 128M
php_value[max_execution_time] = 30
php_value[upload_max_filesize] = 20M
php_value[post_max_size] = 20M
php_value[max_input_vars] = 9999
Run Code Online (Sandbox Code Playgroud)
这是我们的fastcgi.conf
<IfModule mod_fastcgi.c>
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/local/php-5.6.24/sbin/php5-fpm
FastCgiExternalServer /usr/local/php-5.6.24/sbin/php5-fpm -socket /var/run/php5-fpm.sock -idle-timeout 30 -pass-header Authorization
<Directory /usr/local/php-5.6.24/sbin/>
Require all granted
</Directory>
</IfModule>
Run Code Online (Sandbox Code Playgroud)
sev*_*ven 23
从mod_php迁移后,我发现自己处于类似情况下,运行时长,php-fpm和fastcgi.
您看到的错误来自apache的fastcgi代理,该代理终止了与php-fpm池的连接,因为您的脚本在30秒内没有输出任何内容.
您可以在apache配置中更改idle-timeout以扩展它(不能为0):
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /run/php/php7.0-fpm.sock -idle-timeout 1800 -pass-header Authorization
Run Code Online (Sandbox Code Playgroud)
链是这样的:Apache - > FastCgiExternalServer代理 - > php-fpm池服务器 - > php进程
Apache代理会终止与php的连接,因此从php设置max_execution_time或set_time_limit无关紧要.
AFAIK 如果通过mod_fastcgi在Apache上运行php,则无法通过php代码或.user.ini或通过apache(.htaccess)设置每个脚本时间限制.这意味着通过在一个地方扩展它,你可以延长超时时间,例如.您的前端和后端用户.或者,您可以通过2个虚拟主机分隔它,并在那里定义不同的超时值.
虽然这不一定适合OP的配置,但大多数人将在代理设置下运行PHP-FPM.因此,你可以像这样设置代理设置的超时(这是我的php.conf)
<Proxy "fcgi://127.0.0.1:9000">
ProxySet timeout=300
</Proxy>
<FilesMatch \.php$>
SetHandler application/x-httpd-php
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
如果您正在使用.sock文件,只需用fcgi://127.0.0.1:9000命令替换两个实例即可使用sock文件
| 归档时间: |
|
| 查看次数: |
27083 次 |
| 最近记录: |