当我在Apache下运行一个cgi脚本时,任何输出都会快速发送到客户端。 但是,当我用fcgiwrap在nginx下运行它时,似乎没有任何东西被发送到客户端,直到脚本完成或产生大量的输出。
以下脚本可以看到这种行为。
#!/bin/bash echo "Content-type: text/html" echo while : do echo this is a test. sleep 5 done
在apache下,客户端将每5秒钟获取一些数据。
在nginx和fcgiwrap下,我没有得到任何数据和网关超时。
nginx和fcgiwrap是来自Debian Jessie的软件包。 版本1.1.0-5和1.6.2-5 + deb8u4
所以问题
好吧,算出来。 似乎nginx和fcgiwrap都有不合需要的缓冲。 对于nginx来说,似乎可以通过configuration禁用,而fcgiwrap需要一个补丁。
我已经在http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863478发布了fcgiwrap的debdiff,这增加了一个新选项NO_BUFFERING
然后,nginxconfiguration需要改变,将NO_BUFFERING选项传递给fcgiwrap,并禁用nginx内部的缓冲区。
为此,我在“include fastcgi_params;”之前和之后立即添加了一些设置。 线。
#note: NO_BUFFERING relies on a patched fcgiwrap. fastcgi_param NO_BUFFERING 1; include fastcgi_params; gzip off; fastcgi_buffering off;