一、基础配置优化:释放硬件潜能
-
进程与连接调优
-
worker_processes :
推荐设置为auto
(自动匹配CPU核心数),但在特殊场景下需手动优化:nginxworker_processes 8; # 8核CPU手动指定 worker_cpu_affinity 00000001 00000010 ... ; # 绑定进程到特定CPU核心(NUMA架构优化)
-
worker_connections :
总并发量 =worker_processes * worker_connections
。需结合系统级限制调整:bash# 系统级调优(Linux) sysctl -w net.core.somaxconn=65535 sysctl -w fs.file-max=2097152
-
-
长连接优化
-
HTTP Keepalive :
nginxkeepalive_timeout 65s; # 超时时间 keepalive_requests 1000; # 单连接最大请求数(HTTP/2场景可调高)
-
Upstream Keepalive(反向代理场景) :
nginxupstream backend { server 10.0.0.1:8080; keepalive 32; # 与后端维持的最大空闲连接数 }
-
-
缓冲区与请求处理
-
根据业务场景调整缓冲区,避免磁盘I/O:
nginxclient_body_buffer_size 128k; # 大文件上传场景需增大 client_header_buffer_size 4k; # 常规头部大小 large_client_header_buffers 4 32k; # 应对复杂Cookie或自定义Header client_max_body_size 100M; # 限制上传文件大小,防DDoS
-
二、缓存策略:从静态资源到动态内容
-
静态资源缓存
-
强制浏览器缓存,减少请求:
nginxlocation ~* \.(js|css|png|webp)$ { expires 365d; # 缓存1年 add_header Cache-Control "public, immutable"; # 不可变资源标记 access_log off; # 关闭日志减少IO }
-
-
代理缓存(反向代理场景)
-
缓存动态内容,降低后端压力:
nginxproxy_cache_path /data/nginx/cache levels=1:2 keys_zone=dynamic_cache:100m max_size=10g inactive=24h use_temp_path=off; location /api { proxy_cache dynamic_cache; proxy_pass http://backend; proxy_cache_lock on; # 防缓存击穿 proxy_cache_valid 200 302 10m; # 成功响应缓存10分钟 proxy_cache_use_stale error timeout updating; # 故障时返回旧缓存 }
-
-
OpenFileCache(文件描述符缓存)
-
加速静态文件访问:
nginxopen_file_cache max=10000 inactive=30s; # 缓存10k文件元数据 open_file_cache_valid 60s; # 元数据有效期 open_file_cache_min_uses 2; # 至少访问2次才缓存
-
三、传输层优化:压缩与协议升级
-
Gzip/Brotli压缩
-
文本压缩节省带宽:
nginxgzip on; gzip_types text/plain application/json application/javascript; gzip_min_length 1024; # 小文件不压缩 gzip_comp_level 6; # 平衡CPU与压缩率 brotli on; # 启用Brotli(需模块支持)
-
-
HTTP/2与TLS优化
-
提升并发与安全:
nginxlisten 443 ssl http2; # 强制HTTP/2 ssl_session_cache shared:SSL:10m; # 会话复用减少握手 ssl_session_timeout 1d; ssl_protocols TLSv1.3 TLSv1.2; # 仅启用现代协议 ssl_ecdh_curve X25519:secp384r1; # 优化ECC性能
-
四、高级技巧:限流、负载均衡与日志
-
请求限流与防护
-
防CC攻击与突发流量:
nginxlimit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s; location /login { limit_req zone=api_limit burst=20 nodelay; # 允许突发20请求 limit_req_status 429; # 自定义返回状态码 }
-
-
智能负载均衡
-
多策略分发流量:
nginxupstream backend { least_conn; # 最小连接数策略 server 10.0.0.1 weight=3; # 权重分发 server 10.0.0.2; server 10.0.0.3 backup; # 备用节点 keepalive 32; }
-
-
日志性能优化
-
减少磁盘IO开销:
nginxaccess_log /var/log/nginx/access.log gzip=1 buffer=64k flush=5m; error_log syslog:server=10.0.0.10:514 warn; # 日志远程传输 log_format json '{ "@timestamp": "$time_iso8601", "remote_addr": "$remote_addr" }'; # JSON格式
-
五、内核级调优(Linux系统)
-
TCP协议栈优化
bashsysctl -w net.ipv4.tcp_tw_reuse=1 # 快速回收TIME_WAIT连接 sysctl -w net.ipv4.tcp_syncookies=0 # 高并发时关闭SYN Cookie sysctl -w net.ipv4.tcp_max_syn_backlog=65535
-
Epoll与多队列网卡
nginxuse epoll; # 事件驱动模型 worker_aio_requests 128; # 异步IO优化
六、监控与压测:验证优化效果
-
实时监控工具
-
Nginx Status模块 :
nginxlocation /nginx_status { stub_status; allow 10.0.0.0/8; deny all; }
-
Prometheus + Grafana :通过
nginx-exporter
收集QPS、延迟、缓存命中率等指标。
-
-
压测工具
-
wrk :模拟高并发场景:
bashwrk -t12 -c1000 -d30s https://example.com/api
-
JMeter:复杂业务场景测试。
-
七、总结:持续优化的哲学
Nginx性能优化是一个动态过程,需结合:
- 硬件资源(CPU、内存、磁盘类型)
- 业务特性(静态/动态内容比例、请求峰值规律)
- 监控数据(错误率、缓存命中率、TCP重传率)
定期执行 nginx -T
导出完整配置,使用 perf-tools
分析内核瓶颈。在云原生场景中,可考虑基于Ingress Controller的动态配置管理。永远不要停止测试与迭代。