优化Nginx HTTPS性能需协同配置SSL会话复用、HTTP/2、keepalive连接及反向代理缓存:启用shared SSL会话缓存与tickets,强制HTTP/2并禁用旧TLS版本,设置合理keepalive参数及upstream长连接,配合proxy_cache与OCSP Stapling降低TLS开销和后端压力。

优化 Nginx 的 HTTPS 请求上下文缓存,核心是减少 TLS 握手开销、提升连接复用率,并配合内容缓存降低后端压力。这不是单个参数能解决的问题,而是围绕 SSL 会话复用、HTTP/2、连接保活和反向代理缓存协同配置的一整套实践。
启用并调优 SSL Session 缓存
每次 TLS 握手需至少 1–2 次往返(RTT),尤其对首次访问用户延迟明显。启用 session 缓存可让客户端复用会话参数,跳过完整握手。
- 使用共享内存池存储会话,避免进程间重复缓存:
ssl_session_cache shared:SSL:10m;(10MB 内存约支持 4 万并发会话) - 设置合理超时时间,平衡内存与复用率:
ssl_session_timeout 4h;(比默认 5m 更适合移动端或长周期访问场景) - 开启会话票据(Session Tickets)作为补充机制,适用于多 worker 进程或集群部署:
ssl_session_tickets on;
如需更高安全性,可定期轮换密钥:
ssl_session_ticket_key /etc/nginx/ticket.key;
强制启用 HTTP/2 并禁用旧协议
HTTP/2 天然支持多路复用,在单个 TLS 连接上并发处理多个请求,显著降低连接建立和队头阻塞开销。
- 监听时明确启用 http2:
listen 443 ssl http2; - 禁用不安全或低效的旧协议版本:
ssl_protocols TLSv1.2 TLSv1.3;(彻底移除 TLSv1.0/TLSv1.1) - 优先选用高效且前向安全的加密套件:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
配置 keepalive 连接与上游缓存协同
HTTPS 请求常伴随频繁的 API 或静态资源访问,保持长连接 + 合理缓存策略能成倍减少 TLS 和后端往返。
- 延长客户端连接生命周期:
keepalive_timeout 30s;
keepalive_requests 100; - 为 upstream 设置长连接(尤其对接 Node.js/Python 等非 keepalive 友好服务):
upstream backend {
server 127.0.0.1:8000;
keepalive 32;
}
并在 location 中启用:
proxy_http_version 1.1;
proxy_set_header Connection ''; - 搭配 proxy_cache 减少重复请求穿透到上游:
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
精简响应头与启用 OCSP Stapling
部分 TLS 相关头部或证书验证过程会引入额外延迟,尤其是 OCSP 查询。优化这些细节能进一步压缩首字节时间(TTFB)。
- 启用 OCSP Stapling,由 Nginx 主动获取并缓存证书吊销状态,避免客户端直连 CA:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s; - 移除冗余响应头降低传输体积:
ssl_buffer_size 4k;(避免小包碎片,提升吞吐)
add_header X-Content-Type-Options nosniff;(安全但非性能关键,按需保留)


















