nginx的优化策略

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/2listen 443 ssl http2; 提升多路复用效率。
  • 动态模块
    • Brotli压缩(替代Gzip,更高压缩率)。
    • Lua脚本(ngx_lua模块实现复杂逻辑)。
  • 禁用非必要模块:编译时移除未用模块(如--without-http_ssi_module)。

10. 性能监控与测试

  • 监控工具stub_status 模块实时查看连接状态。
  • 压测工具:使用 wrkab 模拟高并发场景。
  • 持续调优:根据监控数据调整配置(如缓存策略、连接数)。

通过上述策略,可显著提升Nginx的吞吐量、降低延迟,并增强服务稳定性。建议结合具体场景逐步调整,并通过压测验证效果。

posted on 2025-06-25 14:01  Leo-Yide  阅读(46)  评论(0)    收藏  举报