我正在使用nginx和fcgiwrap来提供以bash编写的cgi。
它可以工作,但是我遇到了困扰,无法将其用作服务器发送的事件。
这是我的nginx配置:
location ~ \.(sh)$ {
include /etc/nginx/fastcgi_params;
fastcgi_param NO_BUFFERING 1;
fastcgi_param SCRIPT_FILENAME /home/xxxx/cgi/$fastcgi_script_name;
fastcgi_buffering off;
chunked_transfer_encoding off;
proxy_buffering off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
gzip off;
fastcgi_keep_conn on;
fastcgi_max_temp_file_size 0;
}
这是我的脚本:
#!/bin/bash
printf "HTTP/1.0 200 OK\r\n"
printf "Content-Encoding: none\r\n"
printf "Content-type: text/event-stream\r\n"
printf "X-Accel-Buffering: no\r\n"
printf "\r\n"
seq 13 | xargs -n 1 -P 1 -I £ echo "£" | while read l;
do
printf "data: ${l}\n\n"
sleep .7
done
printf "\r\n"
在终端中运行时,每一行都依次打印。
但是在浏览器中或使用curl时,所有行都在9.1秒后立即打印。
我试图调整nginx配置,将所有缓冲区设置为0或关闭,或传递NO_BUFFERING变量。
我试图通过传递NO_BUFFERING变量来调整spawn-fcgi配置。
但没有任何改变。
我错过了什么?