<p>Nginx 控制静态资源访问的缓冲区需区分请求侧与响应侧,禁用 proxybuffer* 类指令;有效配置包括 client_header_buffer_size、large_client_header_buffers、sendfile/tc_nopush/tc_nodelay 组合、keepalive_timeout/requests 及 reset_timedout_connection,且须置于纯静态 location 中。</p>

Nginx 控制静态资源访问的缓冲区,核心在于区分“请求侧”和“响应侧”,且必须避开 proxy 相关指令——因为静态资源不走代理链路,proxy_buffer_* 类参数完全无效,设了反而浪费内存、干扰逻辑。
真正起作用的是以下四类指令,分别对应不同环节:
client_header_buffer_size 和 large_client_header_buffers
控制客户端发来的请求头(如 Host、User-Agent、Cookie)如何被接收和暂存。高并发下大量小请求头容易堆积,缓冲太小会触发磁盘临时文件或反复分配内存。
-
client_header_buffer_size 4k;
覆盖绝大多数标准请求头,设为系统页大小(通常 4KB)最稳 -
large_client_header_buffers 4 8k;
预留 4 个 8KB 缓冲区,应对含长 Cookie 或自定义 Header 的异常请求 - 不要调大
client_body_buffer_size(静态资源几乎不收请求体),8k~16k 足够
sendfile、tcp_nopush、tcp_nodelay
这组配合决定文件内容从磁盘到网卡的传输效率,本质是绕过用户态拷贝、减少小包数量。
-
sendfile on;
必开。让内核直接从文件缓存送数据到 socket,跳过 Nginx 用户态内存 -
tcp_nopush on;
必配。需与sendfile同时启用,等 TCP 包填满再发,降低网络小包率 -
tcp_nodelay off;
静态资源不追求单次响应毫秒级延迟,保持默认关闭更利于吞吐(不是必须显式写off,但别误开)
keepalive_timeout 和 keepalive_requests
连接层缓冲管理:避免空闲连接长期占位,间接释放缓冲资源。
-
keepalive_timeout 15;
比默认 65 秒更早回收空闲连接,缓解 TIME_WAIT 堆积 -
keepalive_requests 1000;
单连接复用千次请求,在握手开销和连接维护间取得平衡
reset_timedout_connection on
主动清理超时僵死连接,防止它们持续占用 worker_connections 和关联缓冲区。
这些配置都应放在 http 或 server 块中,确保只作用于纯静态 location(如 location ^~ /static/),且该 location 内没有 proxy_pass。混用代理和静态服务时,务必用前缀匹配严格隔离,避免规则穿透导致缓冲逻辑错乱。


















