nginx启用https必须正确配置ssl_certificate和ssl_certificate_key,分别指向含域名证书与中间证书的fullchain.pem及未加密privkey.pem,路径须为绝对路径、权限设为644和600,并配合listen 443 ssl使用,最后通过nginx -t验证后reload。

在 Nginx 中启用 HTTPS,必须正确配置 ssl_certificate 和 ssl_certificate_key 指令,分别指向证书文件和私钥文件。路径必须准确、权限需合理、格式要合规,否则 Nginx 启动会失败或 TLS 握手异常。
确认证书与私钥文件位置和格式
证书文件(如 fullchain.pem)应包含域名证书 + 中间证书(推荐 PEM 格式,按顺序拼接);私钥文件(如 privkey.pem)必须是未加密的 RSA 或 ECDSA 私钥(若带密码,Nginx 启动时无法自动读取)。
- 用
openssl x509 -in fullchain.pem -text -noout验证证书有效性 - 用
openssl rsa -in privkey.pem -check -noout确认私钥完整且未加密 - 确保两个文件都存放在 Nginx 有读取权限的目录(如
/etc/nginx/ssl/),且属主为root,权限设为644(证书)和600(私钥)
在 server 块中正确声明 SSL 参数
这两个指令必须出现在启用 HTTPS 的 server 块内,并配合 listen 443 ssl 使用。不能写在 http 或 upstream 块中,也不能遗漏 ssl 标志。
- 示例配置片段:
server {
listen 443 ssl;
server_name example.com;
<pre class="brush:php;toolbar:false;">ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 其他 SSL 安全配置(可选但推荐)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;}
- 若使用通配符证书或多个域名,确保证书本身支持对应 SAN(Subject Alternative Name)
- 不建议将证书/私钥直接嵌入配置文件(如 base64 编码),不利于更新与审计
检查语法并重载 Nginx
配置完成后务必验证语法,再平滑重载,避免服务中断。
- 运行
sudo nginx -t:成功则输出 “syntax is ok” 和 “test is successful” - 若报错如 “cannot load certificate” 或 “no start line”,常见原因是路径错误、文件为空、格式非 PEM、或私钥被密码保护
- 确认无误后执行
sudo nginx -s reload
验证 HTTPS 是否生效
启动后,可通过浏览器访问 https://your-domain.com,或使用命令行工具快速确认:
-
curl -I https://your-domain.com --insecure(跳过证书校验,看是否返回 HTTP 200) -
openssl s_client -connect your-domain.com:443 -servername your-domain.com查看证书链和协议协商结果 - 注意:若使用自签名证书或本地 hosts 绑定,浏览器可能显示不安全警告,但 TLS 握手本身可成功











