nginx,防止在fastcgi中缓冲

时间:2019-01-03 17:16:04

标签: bash nginx fastcgi server-sent-events spawn-fcgi

我正在使用nginx和fcgiwrap来提供以bash编写的cgi。

sequence diragram

它可以工作,但是我遇到了困扰,无法将其用作服务器发送的事件。

这是我的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配置。

但没有任何改变。

我错过了什么?

0 个答案:

没有答案
相关问题