nginx 通过 listen 443 ssl 启用 https,需在 server 块中显式配置该指令,并配套 ssl_certificate、ssl_certificate_key、ssl_protocols tlsv1.2 tlsv1.3 等参数,证书路径有效、权限严格(私钥 chmod 600),且必须独立 server 块支持 sni,最后 nginx -t 验证后 nginx -s reload 生效。

要让 Nginx 通过 listen 443 ssl 开启原生 HTTPS 加密传输,核心是正确配置 SSL 证书、启用 TLS 协议,并绑定到 443 端口。这不是单纯加一行代码的事,而是涉及证书准备、协议安全性和配置结构三个关键环节。
准备好合法有效的 SSL 证书文件
Nginx 的 ssl_certificate 和 ssl_certificate_key 指令必须指向真实可用的 PEM 格式证书链和私钥文件。自签名证书仅适合测试,生产环境建议使用 Let’s Encrypt 或商业 CA 签发的证书。
- 证书文件(如
fullchain.pem)应包含站点证书 + 中间证书,顺序不能颠倒 - 私钥文件(如
privkey.pem)必须严格保护权限(chmod 600),避免被非 root 用户读取 - 可运行
openssl x509 -in fullchain.pem -text -noout验证证书内容与域名匹配
在 server 块中正确声明 listen 443 ssl
不是所有 listen 443 都自动启用 HTTPS;必须显式加上 ssl 参数,且该 server 块需独立于 HTTP(80 端口)配置,或通过 return 301 https://$host$request_uri; 强制跳转。
- 写法必须是:
listen 443 ssl http2;(http2可选但推荐) - 不能写成
listen 443; ssl on;—— 这是已弃用的旧语法(Nginx ≥ 1.15.0 不再支持) - 若需同时支持 IPv4/IPv6,可写为:
listen [::]:443 ssl http2;
启用现代 TLS 协议与安全参数
仅开启 ssl 不代表真正安全。需明确指定 TLS 版本、加密套件和 HSTS 策略,防止降级攻击或弱算法被利用。
- 强制 TLS 1.2+:
ssl_protocols TLSv1.2 TLSv1.3;(禁用 TLSv1.0/1.1) - 选用强加密套件:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; - 启用 HSTS(防劫持):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
验证配置并热重载
配置完成后务必验证语法,再平滑重启,避免服务中断。
- 检查配置:运行
nginx -t,确认输出success - 重载生效:执行
nginx -s reload(不要用systemctl restart nginx,避免连接中断) - 验证监听状态:
ss -tlnp | grep :443应显示 nginx 进程监听 IPv4/IPv6 的 443 端口 - 浏览器访问
https://your-domain.com,地址栏显示锁图标且无证书警告











