大文件回源应关闭proxy_buffering以实现流式传输,≥10MB静态文件设为off;若需缓存则调大proxy_buffers(如16 256k)和proxy_busy_buffers_size(如2m),禁用临时文件或挂载SSD优化I/O,并配合超时与HTTP/1.1长连接提升稳定性。

CDN 回源时大文件(如视频、安装包、镜像等)传输效率低,常因 Nginx 默认缓冲区过小导致频繁系统调用、CPU 升高、回源延迟增加。关键不是盲目调大,而是根据后端源站能力、网络带宽和文件特征,合理配置 proxy_buffering、proxy_buffers、proxy_busy_buffers_size 和 proxy_max_temp_file_size 等参数。
关闭或谨慎启用 proxy_buffering
对大文件回源,开启缓冲(默认 on)会将整个响应暂存到内存/临时文件再返回给 CDN,易占满内存或触发磁盘写入,反而拖慢流式传输。建议:
- 对 ≥10MB 的静态文件,直接设
proxy_buffering off;,让 Nginx 边收边转,降低延迟和内存压力 - 若必须缓存(如需统一添加 Header 或做简单重写),可保留
on,但务必配合增大缓冲区并禁用临时文件写入 - 注意:关闭 buffering 后
proxy_buffer_size仅影响响应头缓冲,不影响主体流式转发
调整 proxy_buffers 与 busy_buffers_size
当 proxy_buffering on 时,这些参数决定 Nginx 如何分块接收源站响应:
-
proxy_buffers 8 128k;:分配 8 个缓冲区,每个 128KB;总可用内存约 1MB。对百 MB 文件,建议调至16 256k(4MB)或更高,避免频繁内存复用 -
proxy_busy_buffers_size 512k;:控制“忙”缓冲区上限(即已接收但未发送给客户端的部分)。应 ≤ 所有缓冲区总大小的一半,推荐设为proxy_buffers总量的 1/3~1/2 - 例如:
proxy_buffers 16 256k;→ 总 4MB,则proxy_busy_buffers_size 2m;更稳妥
限制临时文件写入,避免 I/O 瓶颈
当响应超出内存缓冲,Nginx 会写临时文件(默认在 proxy_temp_path)。大文件回源极易触发此行为,造成磁盘争用:
- 设
proxy_max_temp_file_size 0;完全禁止临时文件(强制全部走内存或报错),适用于内存充足且文件大小可控的场景 - 若必须允许落盘,建议单独挂载高速 SSD 到
proxy_temp_path,并设proxy_temp_file_write_size 512k;控制单次写入块大小,减少小 IO - 配合
proxy_buffering off使用时,这些参数实际不生效,可忽略
补充:配合超时与连接复用提升稳定性
缓冲区调优需与连接行为协同,否则仍可能卡在等待阶段:
-
proxy_read_timeout 300;:延长读取源站响应的超时,防止大文件传输中途断连(尤其跨公网回源) -
proxy_http_version 1.1;+proxy_set_header Connection '';:启用 HTTP/1.1 长连接,减少 TCP 握手开销 - 源站支持 Range 请求时,确保
proxy_pass_request_headers on;并透传Range头,让 CDN 可分片拉取










