Я использую nginx и fcgiwrap для обслуживания cgi, написанного на bash.
Это работает, но у меня есть проблема с 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.
Но ничего не изменилось.
Что я пропустил?