温馨提示×

Debian Nginx SSL性能调优技巧

小樊
33
2025-11-23 16:54:09
栏目: 云计算

Debian 上 Nginx SSL 性能调优要点

一 基础与协议栈

  • 保持 Nginx 与系统为最新稳定版,及时获取安全与性能修复;使用 Let’s Encrypt 获取并自动续期证书,减少停机与运维成本。证书路径通常为:/etc/letsencrypt/live/your_domain/
  • 启用 HTTP/2 提升多路复用与头部压缩性能:listen 指令使用 listen 443 ssl http2;
  • 仅启用现代协议:设置 ssl_protocols TLSv1.2 TLSv1.3;,禁用 SSLv3/TLS1.0/TLS1.1
  • 使用现代 AEAD 套件并优先服务端顺序:
    • 示例套件:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
    • 配置:ssl_prefer_server_ciphers on;
  • 生成并引用 DH 参数(Let’s Encrypt 提供 /etc/letsencrypt/ssl-dhparams.pem):ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  • 启用 HSTS 减少后续重定向与协商:add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;

二 握手与会话复用

  • 开启 OCSP Stapling 减少客户端在线校验证书状态的开销:
    • 配置:ssl_stapling on; ssl_stapling_verify on;
    • 使用可靠 DNS 解析器并合理缓存:resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;
  • 配置 SSL 会话缓存 与超时,显著降低完整握手次数:
    • 推荐:ssl_session_cache shared:SSL:10m;(约可缓存 ~4000 个会话,1M≈4000)
    • 超时:内网高并发可适当延长,如 ssl_session_timeout 30m~4h;公网建议平衡安全与资源,常用 10m~1d
    • 建议仅使用 shared 缓存(多 worker 共享,性能更好)
  • 关于 Session Tickets:可开可关。开启可进一步减少握手,但在多前端/多实例场景需保证密钥一致;若难以统一或存在合规顾虑,可关闭:ssl_session_tickets off;

三 连接与传输层优化

  • 开启 TCP Keepalive 复用连接,降低握手与建连成本:
    • 示例:keepalive_timeout 65; keepalive_requests 100;
  • 启用 Gzip/Brotli 压缩文本资源,减少传输体积:
    • Gzip 常用配置:gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_min_length 256;
  • 启用 静态资源长缓存sendfile,减少用户态/内核态拷贝与重复传输:
    • 示例:
      • location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control “public, no-transform”; }
      • sendfile on; tcp_nopush on; sendfile_max_chunk 128k;
  • 适度调整 worker_processes/worker_connections 以匹配 CPU 核心数与并发连接目标(避免过度分配导致上下文切换与内存压力)。

四 系统与内核参数建议

  • 提升 文件描述符 限制(需重启会话生效):
    • /etc/security/limits.conf:*** soft nofile 65535; * hard nofile 65535;**
  • 优化 TCP/IP 栈以支撑高并发短连接/长连接混合场景:
    • /etc/sysctl.conf:
      • net.core.somaxconn = 65535
      • net.ipv4.tcp_max_syn_backlog = 65535
      • net.ipv4.ip_local_port_range = 1024 65535
      • net.ipv4.tcp_tw_reuse = 1
      • net.ipv4.tcp_fin_timeout = 30
    • 应用:sysctl -p

五 验证与运维

  • 配置语法与生效流程:
    • 语法检查:sudo nginx -t
    • 热重载:sudo systemctl reload nginx(避免重启造成瞬时中断)
  • 证书续期演练与自动续期:
    • 演练:sudo certbot renew --dry-run
    • 自动续期由 certbot 定时器负责(安装后通常已启用)
  • 质量与安全评估:
    • 使用 SSL Labs Server Test 检查协议、套件、OCSP、HSTS 等评分与兼容性
  • 监控与告警:
    • 关注 access.log/error.log、握手失败、OCSP 响应时延、连接复用率与 CPU/内存占用,结合业务峰值做滚动调优

0