当PHP-Fpm正在处理时,Nginxclosures连接

我有一个PHP脚本,做一些数据处理。 脚本完成所有工作所需的时间取决于用户的input。 这是不寻常的,需要5-15分钟的处理。

在Apache上一切正常,但在Nginx的连接刚刚closures。 处理时间很less,一切都很好。 问题来源于长期的要求…

没有任何日志中的错误。 我怀疑浏览器closures了连接。

我嗅探了头文件,Nginx似乎没有发送任何响应,直到处理完成。 没有一个头。

我尝试从脚本发送头文件,但似乎nginxcaching所有。

之后,我禁用了PHP输出缓冲并启用了隐式刷新。 我禁用了gzip压缩和zlib。 我将FAST_CGI_BUFFERS最小化为允许的最小值,即:fastcgi_buffers 2 1k; fastcgi_buffer_size 1k; fastcgi_busy_buffers_size 1k; fastcgi_max_temp_file_size 0;

不过,它拒绝发送标题…

所以只是为了certificate我的情况,在代码中的循环之一,我做了一个var_export的对象之一…

繁荣!!! – 有用…

任何人都可以想到更优雅的解决scheme?

谢谢。

8月19日更新

疯狂的事情正在发生。 在我尝试了两天没有任何运气的情况下进行debugging之后,我尝试了一些我以前应该做的事情。

我在Linode上尝试过这个configuration,它工作!

所以可能这个问题是在Ubuntu的configuration…不知道在哪里看。

你必须玩弄服务器的超时。 Nginx正在closures连接,因为它认为它已经完成并且静默地closures连接。 有四条指令可以帮助你。

client_body_timeout (default is 65) client_header_timeout (default is 65) keepalive_timeout (default is 65) send_timeout (default is 65) 

所有值均以秒为单位。 如果其中任何一个做了诡计,请报告(我个人认为它应该保持活力,但请testing)。

@Fleshgrinder在正确的轨道,我认为,但是有特定的fastcgi超时参数,你应该检查,在nginx的fastcgi_module文档中列出。 特别是,我会看到增加fastcgi_read_timeout从60年代的默认值到1000,看看是否这样sorting。