Nginx 1.13.0+ 原生支持 TLS 1.3(需 OpenSSL 1.1.1+),通过 ssl_protocols TLSv1.2 TLSv1.3 启用,可实现 0-RTT/1-RTT 快速建连,提升首屏加载速度;需确保系统环境兼容,并注意密码套件与 0-RTT 安全使用。
是的,Nginx 从 1.13.0 版本起原生支持 TLS 1.3(需配合 OpenSSL 1.1.1+),启用后可显著减少握手往返次数,实现 0-RTT 或 1-RTT 快速建连,提升首屏加载速度和用户体验。
确认运行环境满足前提条件
TLS 1.3 不是单纯改配置就能生效,必须确保底层组件兼容:
Nginx 版本 ≥ 1.13.0(推荐使用 1.16.0+ 或最新稳定版)
OpenSSL 版本 ≥ 1.1.1(执行
openssl version
验证;若为 1.0.2 或 1.1.0,则需升级或重新编译 Nginx)
系统内核及 glibc 兼容新版 OpenSSL(常见于 CentOS 7.6+/Ubuntu 18.04+)
在 server 块中启用 TLS 1.3 协议
只需在
ssl_protocols
指令中加入
TLSv1.3
,并保留必要旧版本以兼顾兼容性(如 TLSv1.2):
}
注意:OpenSSL 1.1.1 默认已启用 TLS 1.3,无需额外开关;
不要
在
ssl_ciphers
中混入 TLS 1.2 专属套件(如 ECDHE-RSA-AES256-SHA),否则可能干扰协商。
可选:启用 0-RTT 优化(谨慎使用)
TLS 1.3 支持 0-RTT 数据传输,但存在重放攻击风险,仅建议用于幂等操作(如 GET 请求):
在 Nginx 配置中添加:
ssl_early_data on;
后端应用需识别
$ssl_early_data
变量(值为 "1" 表示该请求为 0-RTT)并做业务层校验
不建议对登录、支付等敏感接口开启
验证是否生效
部署后通过以下方式快速确认:
浏览器开发者工具 → Security 标签页,查看连接协议是否显示 “TLS 1.3”
命令行测试:
openssl s_client -connect example.com:443 -tls1_3
在线检测:
SSL Labs Test
(选择“Latest”扫描,结果中 Protocol Support 应包含 TLS 1.3)
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3; # 显式启用 TLS 1.3
ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
ssl_prefer_server_ciphers off;
