Nginx优化策略的结构化总结,涵盖配置调整、系统优化及安全加固等方面:
1. 工作进程与连接优化
多进程模型:设置 worker_processes auto; 自动匹配CPU核心数。
连接数限制:worker_connections 1024;,总连接数 = worker_processes × worker_connections。
长连接优化:
keepalive_timeout 65;(减少空闲连接占用)。
keepalive_requests 100;(限制单个连接请求数)。
2. 静态资源传输优化
高效传输:
sendfile on; 启用零拷贝传输。
tcp_nopush on;(与sendfile配合,合并数据包)。
tcp_nodelay on;(禁用Nagle算法,提升实时性)。
压缩:
gzip on; 开启Gzip压缩。
gzip_comp_level 6;(平衡压缩率与CPU消耗)。
gzip_types text/css application/json; 指定压缩类型。
3. 反向代理与负载均衡
策略选择:
轮询(默认)、权重(weight)、IP哈希(ip_hash)、最少连接(least_conn)。
健康检查:
max_fails 3; + fail_timeout 30s; 标记故障节点。
缓冲区优化:
proxy_buffers 8 16k; 调整响应缓冲区大小。
proxy_buffer_size 4k; 初始响应头缓冲区。
4. SSL/TLS加速
协议与加密套件:
ssl_protocols TLSv1.2 TLSv1.3; 禁用旧协议。
优先ECDHE密钥交换,如 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256;。
性能优化:
ssl_session_cache shared:SSL:10m; 会话复用。
ssl_session_timeout 10m; 会话有效期。
ssl_stapling on; 启用OCSP装订减少验证延迟。
5. 缓存配置
反向代理缓存:proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m;
proxy_cache_key "$scheme$request_method$host$request_uri";
浏览器缓存:
expires 30d; 静态资源长期缓存。
add_header Cache-Control "public"; 明确缓存策略。
6. 日志优化
减少磁盘IO:
access_log off; 或 access_log /var/log/nginx/access.log buffer=64k flush=1m;。
定期切割日志(使用logrotate或脚本)。
日志级别:error_log warn; 避免冗余调试信息。
7. 操作系统调优
文件描述符:
worker_rlimit_nofile 65535; 提升Nginx限制。
修改系统限制:ulimit -n 65535(写入/etc/security/limits.conf)。
网络参数:# 调整内核参数(/etc/sysctl.conf)
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
8. 安全加固
隐藏版本:server_tokens off;。
请求限制:
limit_conn_zone $binary_remote_addr zone=conn_limit:10m; 限制并发连接。
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s; 请求速率限制。
超时控制:client_body_timeout 10s; 防止慢客户端攻击。
9. 高级优化
启用HTTP/2:listen 443 ssl http2; 提升多路复用效率。
动态模块:
Brotli压缩(替代Gzip,更高压缩率)。
Lua脚本(ngx_lua模块实现复杂逻辑)。
禁用非必要模块:编译时移除未用模块(如--without-http_ssi_module)。
10. 性能监控与测试
监控工具:stub_status 模块实时查看连接状态。
压测工具:使用 wrk 或 ab 模拟高并发场景。
持续调优:根据监控数据调整配置(如缓存策略、连接数)。
通过上述策略,可显著提升Nginx的吞吐量、降低延迟,并增强服务稳定性。建议结合具体场景逐步调整,并通过压测验证效果。