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/内存占用,结合业务峰值做滚动调优