如何防止 Nginx 缓冲我的 uwsgi 应用程序的输出?对于我的 comet 样式应用程序,我使用长轮询,现在请求已缓冲。
我试图减小缓冲区的大小,但不允许将其设置uwsgi_buffer_size
为uwsgi_buffers
0。也uwsgi_max_temp_file_size
不起作用(尽管手册建议这样做)。
我怎样才能做到这一点?
答案1
直到几分钟前,这还是不可能的。nginx 总是会缓冲所有 uwsgi 和 scgi 响应,并且没有配置可以改变这一点。
我有提交了 nginx 补丁(并且它被接受了)并且从下一个版本开始有两种方法可以禁用 uwsgi 请求的缓冲:
- 放入
uwsgi_buffering off
nginx 配置 - 寄一个
X-Accel-Buffering
'否' 标题回复
uwsgi 从不缓冲响应,因此不需要进行任何配置。
答案2
为什么不直接使用 uwsgi 嵌入的 http-router/load-balancer ?它不进行缓冲,特别是对于 comet/websockets 应用程序。您可以使用 nginx 将静态文件映射到另一个域。
答案3
尝试使用 uwsgi_max_temp_file_size = 0
答案4
Nginx“代理”模块有一个指令,它被称为proxy_buffering on|off
,它完全符合您的要求,关闭缓冲并同步代理上游输出。但据我所知,FastCGI 和 UWSGI 模块都没有此功能。
顺便说一句,即使proxy_buffering
是off
,您也可能会注意到由于 OS TCP 堆栈缓冲而导致的轻微延迟。