我阅读了很多关于适用于SSE的Nginx配置的不同问题,并得出了一些令人困惑的结果,有关要使用哪些设置。
那么正确答案是什么呢?
服务器发送事件(SSE)是一种长时间运行的HTTP连接**,所以首先我们需要这个:
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off
应用于所有内容,实际上最好(如果您能够)在应用服务器代码中添加X-Accel-Buffering: no
作为响应头,仅将缓冲关闭用于基于SSE的响应,而不是所有来自应用服务器的响应。额外加分:这也适用于uwsgi
和fastcgi
。
因此,真正重要的设置实际上是应用服务器的响应头。
Content-Type: text/event-stream;
Cache-Control: no-cache;
X-Accel-Buffering: no;
keepalive
参数关闭空闲连接。
X-Accel-Buffering: no
头信息是关键,但更重要的是,我必须像 @c4urself 写的那样去做:"在你的应用服务器代码中将 X-Accel-Buffering: no 添加为一个响应头"。将这个头信息添加到我 nginx 配置的位置部分并不能生效 -- 整个事件流会等待应用完成/终止后才被发送出去。 - MDMowerproxy_http_version 1.1;
是必需的吗?我正在尝试从浏览器运行超过6个SSE流,因此我需要HTTP2。 - Bilal Fazlani