nginx, предотвратить буферизацию в fastcgi - PullRequest
0 голосов
/ 03 января 2019

Я использую nginx и fcgiwrap для обслуживания cgi, написанного на bash.

sequence diragram

Это работает, но у меня есть проблема с beffering, которая не позволяет мне использовать его как отправленное сервером событие.

Вот моя конфигурация 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.

Я попытался настроить конфигурацию spawn-fcgi, передав переменную NO_BUFFERING.

Но ничего не изменилось.

Что я пропустил?

...