全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 8 分钟 ✍️ juanwangdev

Nginx 缓冲区大小配置

Nginx 通过多级缓冲区管理请求/响应数据,合理配置可减少磁盘 I/O,提升高并发性能。

请求体缓冲

client_body_buffer_size

nginx
http {
    # 请求体缓冲区大小
    client_body_buffer_size 16k;

    # 请求体最大大小
    client_max_body_size 10m;

    # 请求体临时文件目录
    client_body_temp_path /tmp/nginx_client_body;
}

溢出机制

nginx
client_body_buffer_size = 16k

请求体 ≤ 16k:  内存处理(无磁盘 I/O)
请求体 > 16k:  溢出到临时文件(磁盘 I/O)

性能影响:
- 内存处理: ~0.1ms
- 磁盘处理: ~5-10ms(50-100x 性能差异)

默认值通常为 8k 或 16k,应根据业务请求体分布设置,避免频繁磁盘溢出。

代理响应缓冲

proxy_buffer 配置

nginx
location /api/ {
    proxy_pass http://backend;

    # 代理响应缓冲区
    proxy_buffering on;
    proxy_buffer_size 4k;       # 响应头缓冲区
    proxy_buffers 8 16k;        # 响应体缓冲区(8 个 16k)
    proxy_busy_buffers_size 32k; # 可发送给客户端的缓冲区上限

    # 临时文件
    proxy_temp_path /tmp/nginx_proxy;
    proxy_max_temp_file_size 1024m;
}

缓冲区计算

参数默认值说明
proxy_buffer_size4k/8k响应头 + 第一块响应体
proxy_buffers8 × buffer_size总缓冲 = 数量 × 大小
proxy_busy_buffers_size2 × buffer_size同时发送给客户端的缓冲区

proxy_buffers 总容量 = 数量 × 大小,决定可缓存的最大响应体。

其他缓冲区

fastcgi_buffer

nginx
location ~ \.php$ {
    fastcgi_buffering on;
    fastcgi_buffer_size 4k;
    fastcgi_buffers 8 16k;
    fastcgi_busy_buffers_size 32k;
}

uwsgi_buffer

nginx
location / {
    uwsgi_buffering on;
    uwsgi_buffer_size 4k;
    uwsgi_buffers 8 16k;
}

调优策略

场景化配置

场景buffer_sizebuffers说明
API(小响应)4k8 × 4kAPI 响应通常 < 32k
静态文件8k8 × 8k中等大小文件
大文件下载16k16 × 16k减少磁盘 I/O
WebSocketoff-禁用缓冲,实时转发

高并发调优

nginx
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 10240;
}

http {
    # 减少每个连接的内存占用
    client_body_buffer_size 8k;
    proxy_buffer_size 4k;
    proxy_buffers 4 8k;

    # 限制总内存使用
    # 单连接最大缓冲 = client_body_buffer_size + proxy_buffers 总和
    # 10000 连接 ≈ 10000 × (8k + 32k) = 400MB
}

禁用缓冲

nginx
# 实时流媒体
location /stream/ {
    proxy_buffering off;
    proxy_request_buffering off;
}

# SSE/Server-Sent Events
location /events {
    proxy_buffering off;
    proxy_cache off;
}

监控与诊断

缓冲区溢出日志

text
error_log /var/log/nginx/error.log warn;

# 溢出时会记录
# [warn] 1234#0: *5 a]n upstream response is buffered to a temporary file /tmp/nginx_proxy/0000000001

内存使用计算

text
单连接内存占用:
= client_body_buffer_size
+ proxy_buffer_size
+ proxy_buffers (数量 × 大小)
+ 连接结构 (~2KB)

10000 并发连接:
= 10000 × (8k + 4k + 32k + 2k)
≈ 460MB

要点总结

  • client_body_buffer_size 决定请求体内存/磁盘分界点,过小导致频繁磁盘 I/O
  • proxy_buffers 控制响应体缓冲容量,总容量 = 数量 × 大小
  • 高并发场景应减小缓冲区,避免内存耗尽
  • WebSocket/SSE 场景需禁用缓冲,保证实时性
  • 缓冲区配置应根据业务响应分布调整,而非盲目增大

📝 发现内容有误?点击此处直接编辑

← 上一篇 Nginx 内存池与共享内存优化
下一篇 → 会话保持
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库