CDN回源时,Nginx长连接复用与缓冲区配置需协同优化:upstream keepalive建议32–128,必须配proxy_http_version 1.1和proxy_set_header Connection '';大文件(≥10MB)应proxy_buffering off实现流式转发;若开启缓冲,需合理设置proxy_buffers、proxy_busy_buffers_size及禁用临时文件,并配合超时与TCP参数调优。

CDN回源时,Nginx 的长连接复用和缓冲区配置直接影响传输效率、内存占用与首字节延迟。关键不是堆参数,而是让连接“稳得住”、数据“流得顺”——尤其对视频、安装包、镜像等大文件。
合理设置 upstream keepalive 连接池
keepalive 不是预建连接,而是缓存空闲的 HTTP/1.1 长连接供后续请求复用。值设太小会频繁建连;太大则易耗尽上游端口或堆积 TIME_WAIT。
- 每个 upstream server(IP+端口)独立维护池子,若 DNS 解析出 4 个 IP,实际总连接数是 keepalive 值 × 4
- 起始建议设为 32,中高并发可调至 128;超过 256 需同步检查上游服务的连接上限与超时策略
- 必须搭配 proxy_http_version 1.1 和 proxy_set_header Connection '',否则无法触发复用
- 上游响应头需含 Connection: keep-alive,且避免中间设备(如 WAF、LB)误删或改写该头
按文件类型开关 proxy_buffering
缓冲行为决定 Nginx 是“边收边转”还是“收完再转”。对大文件,开启缓冲反而增加延迟和内存压力。
- ≥10MB 的静态文件(如 .mp4、.iso、.tar.gz):设 proxy_buffering off,实现流式转发,降低回源延迟与 CPU 拷贝开销
- 若需在回源路径上添加 Header 或做简单重写,保留 proxy_buffering on,但务必同步调大缓冲区
- 注意:proxy_buffer_size 只影响响应头缓冲,无论 buffering 开关与否都生效,设 4k–16k 足够
buffering on 时精准调整缓冲区参数
当必须启用缓冲(如需统一加 Header),缓冲区大小要匹配典型响应体,避免频繁内存复用或落盘。
- proxy_buffers 16 256k:分配 16 个缓冲区,每个 256KB,总约 4MB,适配百 MB 级文件
- proxy_busy_buffers_size 2m:控制已接收但未发出的部分,建议为 buffers 总量的 1/2~1/3
- proxy_max_temp_file_size 0:禁用临时文件写入(内存充足前提下),防止磁盘 I/O 成为瓶颈
- 若必须落盘,将 proxy_temp_path 挂载到 SSD,并设 proxy_temp_file_write_size 512k 减少小 IO
协同优化 TCP 与超时行为
缓冲区和连接池调优需配合底层网络与超时机制,否则仍可能卡在等待阶段。
- proxy_read_timeout 300:延长从源站读取响应的超时,防跨公网回源中途断连
- 系统级调优不可少:开启 net.ipv4.tcp_window_scaling=1,增大 net.ipv4.tcp_rmem(如 4096 262144 16777216),支持大窗口吞吐
- 监听端口启用 reuseport(listen 443 ssl reuseport;),多 worker 下分散连接队列压力
- 空闲连接存活时间由上游 Keep-Alive: timeout=XX 决定;若上游不返回,Nginx 默认 75 秒清理(1.19.10+ 可用 keepalive_timeout 显式覆盖)











