Nginx 高性能配置优化

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和响应时间,用数据验证优化效果。切记优化要循序渐进,每次只改一项,便于定位问题。