理论上满足 Nginx ≥ 1.13.0 且正确配置ssl_protocols参数即可启用。但在实际部署过程中发现,即使版本与配置均符合要求,客户端仍可能返回协议不支持错误。
经过我的查询与验证,发现根本问题在于:当多个虚拟主机共享同一监听端口时,Nginx 要求所有站点的 ssl_protocols 配置必须显式包含 TLS 1.3。
根据上述发现的问题,我作出以下修改:
将 SSL 相关参数提升至 http 块进行统一管理,同时解决配置碎片化问题
http {
......
# 可以根据自己服务器的会话数量自行调整
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# nginx的默认值
ssl_protocols TLSv1.2 TLSv1.3;
# nginx的默认值, 仅支持配置TLSv1.2, TLSv1.3通过ssl_conf_command来配置
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
......
}2.server块中只需证书相关的配置
server {
listen 443 ssl;
server_name your.domain;
......
# ssl证书地址
ssl_certificate xxx.pem;
ssl_certificate_key xxx.pem;
......
}