性能陷阱
Worker 配置
worker_processes auto在容器中可能过多 — 手动限制worker_connections 1024是每个 worker — 总量 = workers × connectionsmulti_accept on可能导致某些 worker 饥饿- CPU 绑定(
worker_cpu_affinity)实际中很少有效
缓冲区
client_body_buffer_size太小 + 大上传 = 写入临时文件- 缓冲区静默溢出 — 请求能处理但更慢
proxy_buffer_size需要容纳后端的响应头- 大量小缓冲区比少量大缓冲区更浪费内存
Gzip 压缩
gzip on不加gzip_types= 只压缩 text/html- 压缩已压缩文件(jpg、png、zip)= 浪费 CPU 且文件更大
gzip_vary on对 CDN 至关重要 — 没有它 CDN 可能提供错误版本gzip_comp_level 9很少值得 — 6 是最佳平衡点
缓存
proxy_cache不设proxy_cache_key使用默认值,可能冲突- 缓存 key 包含
$request_uri就包含查询字符串 — 缓存可能爆炸 proxy_cache_valid 200 1h— 但 301/302 默认永久缓存inactivevsmax_size— inactive 按时间清理,max_size 按空间清理
静态文件
sendfile on不加tcp_nopush on= 没利用内核优化expires头不加Cache-Control= 浏览器忽略try_files带很多路径 = 多次系统调用- 符号链接 +
disable_symlinks安全设置可能导致部署失败
日志
access_log默认同步写入 = 每个请求都阻塞 I/Obuffer=32k flush=5s异步日志 — 但崩溃时可能丢失日志- 日志轮转不发送
reopen信号 = nginx 写入已删除的文件 - JSON 日志可解析但每行更多字节