Nginx性能优化:从配置到缓存,全面提升Web服务器性能
一、基础配置优化:释放硬件潜能
-
进程与连接调优
- worker_processes:
推荐设置为auto
(自动匹配CPU核心数),但在特殊场景下需手动优化:worker_processes 8; # 8核CPU手动指定 worker_cpu_affinity 00000001 00000010 ... ; # 绑定进程到特定CPU核心(NUMA架构优化)
- worker_connections:
总并发量 =worker_processes * worker_connections
。需结合系统级限制调整:# 系统级调优(Linux) sysctl -w net.core.somaxconn=65535 sysctl -w fs.file-max=2097152
- worker_processes:
-
长连接优化
- HTTP Keepalive:
keepalive_timeout 65s; # 超时时间 keepalive_requests 1000; # 单连接最大请求数(HTTP/2场景可调高)
- Upstream Keepalive(反向代理场景):
upstream backend {server 10.0.0.1:8080;keepalive 32; # 与后端维持的最大空闲连接数 }
- HTTP Keepalive:
-
缓冲区与请求处理
- 根据业务场景调整缓冲区,避免磁盘I/O:
client_body_buffer_size 128k; # 大文件上传场景需增大 client_header_buffer_size 4k; # 常规头部大小 large_client_header_buffers 4 32k; # 应对复杂Cookie或自定义Header client_max_body_size 100M; # 限制上传文件大小,防DDoS
- 根据业务场景调整缓冲区,避免磁盘I/O:
二、缓存策略:从静态资源到动态内容
-
静态资源缓存
- 强制浏览器缓存,减少请求:
location ~* \.(js|css|png|webp)$ {expires 365d; # 缓存1年add_header Cache-Control "public, immutable"; # 不可变资源标记access_log off; # 关闭日志减少IO }
- 强制浏览器缓存,减少请求:
-
代理缓存(反向代理场景)
- 缓存动态内容,降低后端压力:
proxy_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(文件描述符缓存)
- 加速静态文件访问:
open_file_cache max=10000 inactive=30s; # 缓存10k文件元数据 open_file_cache_valid 60s; # 元数据有效期 open_file_cache_min_uses 2; # 至少访问2次才缓存
- 加速静态文件访问:
三、传输层优化:压缩与协议升级
-
Gzip/Brotli压缩
- 文本压缩节省带宽:
gzip on; gzip_types text/plain application/json application/javascript; gzip_min_length 1024; # 小文件不压缩 gzip_comp_level 6; # 平衡CPU与压缩率 brotli on; # 启用Brotli(需模块支持)
- 文本压缩节省带宽:
-
HTTP/2与TLS优化
- 提升并发与安全:
listen 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攻击与突发流量:
limit_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; # 自定义返回状态码 }
- 防CC攻击与突发流量:
-
智能负载均衡
- 多策略分发流量:
upstream backend {least_conn; # 最小连接数策略server 10.0.0.1 weight=3; # 权重分发server 10.0.0.2;server 10.0.0.3 backup; # 备用节点keepalive 32; }
- 多策略分发流量:
-
日志性能优化
- 减少磁盘IO开销:
access_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格式
- 减少磁盘IO开销:
五、内核级调优(Linux系统)
-
TCP协议栈优化
sysctl -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与多队列网卡
use epoll; # 事件驱动模型 worker_aio_requests 128; # 异步IO优化
六、监控与压测:验证优化效果
-
实时监控工具
- Nginx Status模块:
location /nginx_status {stub_status;allow 10.0.0.0/8;deny all; }
- Prometheus + Grafana:通过
nginx-exporter
收集QPS、延迟、缓存命中率等指标。
- Nginx Status模块:
-
压测工具
- wrk:模拟高并发场景:
wrk -t12 -c1000 -d30s https://example.com/api
- JMeter:复杂业务场景测试。
- wrk:模拟高并发场景:
七、总结:持续优化的哲学
Nginx性能优化是一个动态过程,需结合:
- 硬件资源(CPU、内存、磁盘类型)
- 业务特性(静态/动态内容比例、请求峰值规律)
- 监控数据(错误率、缓存命中率、TCP重传率)
定期执行 nginx -T
导出完整配置,使用 perf-tools
分析内核瓶颈。在云原生场景中,可考虑基于Ingress Controller的动态配置管理。永远不要停止测试与迭代。