nginx504,flush失效

来源:互联网 发布:mac电脑新建文件夹 编辑:程序博客网 时间:2024/06/05 08:24
最近php写了个蜘蛛,在定时任务这块出了点岔子,脚本经常无理由的停止执行或报错504,但是本地apache下完美执行,线上nginx+ fpm就状况百出,最后参阅网上资料,解决方案如下:
1、fpm配置脚本超时时间,脚本自动断开是因为fpm中request_terminate_timeout 这个参数的原因,默认30秒,如果你的脚本是很“准时”的停止,基本上就是它作怪了,扯上一句,nginx装了fpm的话改php.ini下的max_execution_time 是没用的,以fpm配置为准。
2、这个问题折磨了我好久,步骤一改完后蜘蛛总算不准时停止执行了,但是却经常莫名其妙的任意点停止执行,最终不断调试查阅资料,竟然是nginx的buffer配置作怪,主要是如下参数配置:
gzip  off;   压缩
fastcgi_buffer_size 4k;用于指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。
fastcgi_buffers 8 4k;  指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;

默认gzid是开的,且buffer是256K,把他们改成如上即可,原因是nginx有个缓冲区,处理完的数据放在缓冲区内,只要缓冲区达到上限才会输出,显然,我的蜘蛛每条的数据量太小,达不到这个上限,所以等待放满才会输出,结果等着等着就超时了。

另外php代码也可以在flush前加上echo str_repeat(' ', 1024*4);来达到填充的作用。





0 0
原创粉丝点击