在 nginx 上使用 gzip 流式传输代理响应

在 nginx 上使用 gzip 流式传输代理响应

我在 node.js 后端服务器前面有一个 nginx 反向代理。在我的节点应用程序中,我能够在响应准备就绪时对其进行流式传输,以便客户端可以在<head>收到整个响应之前开始下载 HTML 部分中引用的资源。

但是,当我将 nginx 放在中间时,整个响应在发送到客户端之前都会被缓冲。从这个答案,我知道我可以通过proxy_buffering off;在我的 nginx 配置中设置来禁用此功能。但是,nginx 文档解释一下,如果没有代理缓冲,缓慢的客户端会使节点后端等待(这就是 nginx 默认缓冲的原因)。

我想要的是两全其美。我希望 nginx 收到响应并立即开始将其流式传输到客户端。如果客户端比后端慢,nginx 会缓冲来自后端的响应并将其提供给客户端,同时后端可以自由处理其他请求。哦,我还希望 nginx 能够即时为我 gzip 流式传输的响应。

这种配置可行吗?似乎考虑到所有关于提前刷新的性能建议,我不可能成为第一个想要这种设置的人。我扫描了nginx 文档在代理模块上,但我找不到完成此操作的设置。

此外,就 gzip 而言,将流式传输与 gzip 结合起来的方法似乎是进行 nginx 支持的分块传输编码。但显然HTTP/2 不再支持此功能那么新的解决方案是什么?或者,当您告诉 nginx 将 gzip 应用于流时,它是否“正常工作”。

相关内容