来源:https://blog.csdn.net/weixin_54104864/article/details/130862021
# 不缓存,支持流式输出
proxy_cache off; # 关闭缓存
proxy_buffering off; # 关闭代理缓冲
chunked_transfer_encoding on; # 开启分块传输编码
tcp_nopush on; # 开启TCP NOPUSH选项,禁止Nagle算法
tcp_nodelay on; # 开启TCP NODELAY选项,禁止延迟ACK算法
keepalive_timeout 300; # 设定keep-alive超时时间为65秒
- proxy_cache off; # 关闭缓存 关闭缓存,防止代理服务器缓存流式响应内容,导致客户端收不到完整响应。
- proxy_buffering off; # 关闭代理缓冲 关闭代理服务器对响应的缓冲,防止其缓冲整个响应后再发送给客户端,无法实现流式传输效果。
- chunked_transfer_encoding on; # 开启分块传输编码 开启分块传输编码,允许将响应分成多个块进行传输,实现流式传输。
- tcp_nopush on; # 开启TCP NOPUSH选项,禁止Nagle算法 开启TCP NOPUSH选项,禁用Nagle算法,防止小块数据的合并,实时发送给客户端。
- tcp_nodelay on; # 开启TCP NODELAY选项,禁止延迟ACK算法 开启TCP NODELAY选项,禁用延迟ACK算法,防止ACK包的延迟,及时发送给客户端。
- keepalive_timeout 300; # 设定keep-alive超时时间为65秒 增加keepalive超时时间,防止在流式响应未完成时,代理与源服务器的连接就被关闭。
所以,通过关闭缓存和代理缓冲,开启分块编码、禁用Nagle与延迟ACK算法,以及增加keepalive超时时间,可以实现代理服务器与客户端间的流式响应传输。
使用这段配置,nginx代理可以透传源服务器的流式响应给客户端,不会导致响应内容被截断或延迟,实现真正的流式体验。