一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中如何通过 Nginx 优化 HTTPS 的响应传输效率

时间:2026-07-16 07:52:46 编辑:袖梨 来源:一聚教程网

最直接有效的办法是启用 proxy_ssl_session_reuse on 并配套 upstream keepalive、HTTP/2、SSL 缓存与协议优化等组合调优,可将建连延迟从 80–120ms 降至 20–40ms,端到端延迟下降超 30%,复用率稳定在 90% 以上。

最直接有效的办法是减少 TLS 握手开销、复用连接、压缩传输,并让各环节协同生效。单改一两个参数效果有限,关键在组合调优。

复用 TLS 会话,跳过完整握手

启用 proxy_ssl_session_reuse on 是降低建连延迟最直接的手段——Nginx 会复用已建立的 HTTPS 连接,避免重复证书交换与密钥协商。实测可将建连延迟从 80–120ms 降至 20–40ms,端到端延迟下降超 30%,复用率通常稳定在 90% 以上。

  • 必须配套 upstream 中设置 keepalive 32(每个 worker 维护最多 32 个空闲连接)
  • 显式声明 proxy_http_version 1.1proxy_set_header Connection "",防止上游主动断连清空连接池
  • 若后端是多域名共 IP 的网关(如 Istio Ingress),需加 proxy_ssl_server_name on,确保 SNI 一致,否则无法匹配证书、复用失败
  • 后端 idle timeout(如 Spring Boot 的 connection-timeout)不能早于 Nginx 的 keepalive_timeout,否则连接被提前回收

优化 SSL 缓存与协议栈

服务端 TLS 缓存直接影响客户端首次访问后的复用效率,尤其对返回用户至关重要。

  • 在 server 块中启用共享会话缓存:ssl_session_cache shared:SSL:10m(10MB 内存约支持 4000 个会话)
  • 延长缓存有效期:ssl_session_timeout 4h(兼顾复用率与内存安全)
  • 统一并精简协议与加密套件:ssl_protocols TLSv1.2 TLSv1.3;推荐 cipher 如 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
  • 开启 ssl_prefer_server_ciphers on,确保服务端主导加密套件选择
  • 关闭 session tickets:ssl_session_tickets off(Nginx 对其支持不完善,且有安全顾虑)

启用 HTTP/2 并调优传输细节

HTTP/2 支持多路复用,能显著降低并发请求的连接开销;配合 buffer 调整可进一步压低 TTFB(首字节时间)。

  • 监听配置改为:listen 443 ssl http2(要求 Nginx ≥ 1.9.5 + OpenSSL ≥ 1.0.2)
  • 对 REST API 或网页类服务,缩小发送缓冲区:ssl_buffer_size 4k(默认 16k 容易拖慢首包)
  • 启用 OCSP Stapling:ssl_stapling on; ssl_stapling_verify on;,避免客户端自行验证证书导致不可控延迟
  • 开启 Gzip 压缩:gzip on,搭配 gzip_comp_level 2–4 和常用 MIME 类型,减少传输体积

验证与避坑要点

配置生效不等于复用成功,需结合日志与工具交叉确认。

  • 检查日志变量:$upstream_ssl_session_reused 是否频繁输出 "t"(true)
  • 抓包观察 TCP+TLS 流程:复用成功时应无 ServerHello → Certificate → ServerKeyExchange 等完整握手流程
  • curl -w "%{time_starttransfer}n" 测试首包时间变化,建议在真实网络环境(含丢包/延迟)下多轮采样
  • 确认 ssl_session_cache 容量是否足够:每万并发约需 2–3MB,20MB 可支撑 5–8 万连接

热门栏目