Nginx 高性能配置优化实战
Nginx以其高性能、低内存消耗著称,但默认配置并非针对高并发场景优化的。通过系统化的配置调优,Nginx可以充分发挥其性能潜力,轻松支撑每秒数万甚至数十万的请求。
一、Worker进程优化
worker_processes auto; # 自动设置为CPU核数
worker_rlimit_nofile 65535; # worker进程最大文件描述符数
events {
worker_connections 10240; # 每个worker最大并发连接数
use epoll; # Linux下使用epoll事件模型(性能最好)
multi_accept on; # 一次接受所有等待的连接
}
二、HTTP核心参数优化
http {
sendfile on; # 零拷贝发送文件,减少内存复制
tcp_nopush on; # 发送HTTP响应头时合并数据包
tcp_nodelay on; # 小包立即发送,减少延迟
keepalive_timeout 65; # 保持连接超时时间
keepalive_requests 1000; # 一个keepalive连接最多处理请求数
types_hash_max_size 2048;
client_max_body_size 100m; # 上传文件大小限制
client_body_buffer_size 128k; # 请求体缓冲区大小
# 关闭Nginx版本号显示(安全)
server_tokens off;
# 访问日志优化:使用缓冲写入
access_log /var/log/nginx/access.log combined buffer=16k flush=5s;
}
三、Gzip压缩配置
gzip on;
gzip_comp_level 4; # 压缩级别1-9,4是性能与压缩率的平衡点
gzip_min_length 1024; # 小于1KB的响应不压缩
gzip_proxied any;
gzip_vary on;
gzip_types
text/plain
text/css
text/javascript
application/javascript
application/json
application/xml
image/svg+xml
font/woff2;
四、静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|pdf)$ {
expires 30d;
add_header Cache-Control "public, immutable";
add_header Vary Accept-Encoding;
# 开启open_file_cache,缓存文件描述符
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
}
五、反向代理优化
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
keepalive 64; # 保持到后端的长连接池
}
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection ""; # 启用HTTP/1.1长连接
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
}
六、SSL/HTTPS优化
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers off; # SSL会话缓存(避免重复TLS握手) ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_session_tickets off; # OCSP Stapling(减少客户端查询CA的时间) ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s;
七、连接限速与安全
http {
# 限制每个IP的连接数和请求速率
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
}
server {
limit_conn addr 20; # 每IP最多20个并发连接
location /api/ {
limit_req zone=api burst=20 nodelay; # 令牌桶限速
}
}
八、性能测试验证
# 使用wrk进行压测 wrk -t4 -c200 -d30s http://your-server.com/ # -t4: 4个线程 # -c200: 200个并发连接 # -d30s: 持续30秒 # 使用ab压测 ab -n 10000 -c 100 http://your-server.com/
九、总结
Nginx性能优化涉及Worker进程、事件模型、连接池、Gzip、缓存、SSL多个维度。优化后定期进行压测,对比优化前后的QPS和响应时间,用数据验证优化效果。切记优化要循序渐进,每次只改一项,便于定位问题。