如何在Nginx v1.19.7中限制chunked_transfer_encoding的最大块大小?
Nginx v1.19.7 分块响应尺寸控制配置说明
核心实现目标
- 运行环境:Nginx v1.19.7
- 需求:限制
chunked_transfer_encoding机制下对外发送的响应体单个分块的最大尺寸
已排查的无关联配置项
client_body_buffer_size
该参数用于设置读取客户端传入请求体的缓冲区大小,仅作用于请求接收流程,和响应分块尺寸控制无关:当请求体大小超过缓冲区阈值时,超出部分会被写入临时文件,默认值根据运行平台为8K或16K。chunked_transfer_encoding
该参数仅用于控制HTTP/1.1协议下是否启用分块传输编码,只支持分块传输的开启、禁用操作,不提供分块大小的调节能力,多用于兼容不支持分块编码的老旧客户端。
适配需求的配置参数说明
- HTTP/1.1协议下的chunked传输场景,可通过核心模块的
output_buffers参数直接控制单块最大尺寸
该参数定义Nginx向客户端发送响应时的缓冲区数量与单块缓冲区大小,HTTP/1.1启用分块传输时,单个响应块的大小完全匹配该参数配置的单块缓冲区阈值。
版本兼容性:该参数为Nginx内置的核心配置项,从早期版本开始就已支持,完全适配v1.19.7的运行环境。 - 已查询到的
http2_chunk_size参数仅覆盖HTTP/2协议场景
该参数的作用是设置HTTP/2协议下响应体的切分块大小,仅在客户端与Nginx协商使用HTTP/2通信时生效,无法作用于HTTP/1.1的chunked传输流程。若需要同时覆盖两种HTTP协议场景下的响应块尺寸限制,需要同时配置output_buffers与http2_chunk_size,将两个参数的单块值设置为目标阈值即可。
配置注意:块大小设置过低会提升网络交互频次带来额外性能开销;设置过高则会增加队头阻塞概率,影响高并发场景下的响应效率。
参考配置示例
http { # 配置HTTP/1.1分块响应的单块最大为16K,分配2个发送缓冲区 output_buffers 2 16k; # 配置HTTP/2场景的响应切分单块最大为16K http2_chunk_size 16k; }
内容的提问来源于stack exchange,提问作者blkpingu
相关产品推荐
相关产品推荐

