Nginx SSL 配置生成器
生成带 TLS 1.2/1.3、HSTS 和 HTTPS 跳转的 Nginx server 配置,并按你的 Nginx 和 OpenSSL 版本给出注意事项。
浏览器本地运行 你输入的内容只在本地用 JavaScript 处理,不会上传到 ssl.sh。
TLS 配置生成器的 Nginx 预设生成加固过的 Nginx HTTPS 配置。选好档位和选项,把生成的 server 块复制到站点配置里,用 nginx -t 测试后重载。
示例:中级档
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name example.com;
ssl_certificate /etc/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
root /var/www/example.com;
}
国内环境说明
- 宝塔面板:在“网站 → 设置 → SSL”里粘贴“密钥(KEY)”和“证书(PEM格式)”后,面板会把证书写到
/www/server/panel/vhost/cert/<网站名>/下的fullchain.pem和privkey.pem,并在配置文件里生成 ssl 相关指令。要改协议和套件,在“配置文件”里修改ssl_protocols、ssl_ciphers这几行。 - 阿里云、腾讯云下载的 Nginx 证书包:里面的
.pem/_bundle.crt已经是证书链,直接给ssl_certificate;.key给ssl_certificate_key。
版本要求
- TLS 1.3:Nginx 1.13.0+,并且链接 OpenSSL 1.1.1+,用
nginx -V确认。 http2 on;:Nginx 1.25.1+。更老的版本删掉这一行,改为listen 443 ssl http2;。- 后量子:
ssl_ecdh_curve X25519MLKEM768:X25519:prime256v1:secp384r1;需要 OpenSSL 3.5+,版本不够时 Nginx 无法启动,确认后再勾选。
测试并重载
sudo nginx -t && sudo systemctl reload nginx
curl -sI https://example.com | grep -i strict-transport
然后用 SSL 检查确认协议和证书链。
常见错误
常见问题
配置放在哪里?
放在站点的 server 块里,一般是 /etc/nginx/conf.d/example.com.conf,或 /etc/nginx/sites-available/example.com(链接到 sites-enabled)。宝塔面板在“网站 → 设置 → 配置文件”里编辑。ssl_protocols 等也可以写在 http 块里,对所有站点生效。
怎么知道 Nginx 用的是哪个 OpenSSL?
执行 nginx -V,输出里有 built with OpenSSL x.y.z。TLS 1.3 需要 1.1.1+,X25519MLKEM768 需要 3.5+。CentOS 7 上用系统 OpenSSL 1.0.2 编译的 Nginx 不支持 TLS 1.3。
要开 ssl_stapling 吗?
只有 CA 还在提供 OCSP 时才有用。2025 年 5 月以后签发的 Let's Encrypt 证书里没有 OCSP 地址,Nginx 会记一条警告,什么也不会装订。
为什么 ssl_prefer_server_ciphers 设成 off?
中级档列表里的套件都足够安全,让客户端自己选,没有 AES 硬件加速的手机可以选更快的 ChaCha20-Poly1305。