安装与部署
Nginx 安装 SSL 证书:文件怎么放,证书链怎么配?
从 NestSSL 下载证书后,分清证书、CA 中间链和私钥,完成 Nginx 配置与重载,并检查网站是否已经用上新证书。
证书已经签发,接下来要让 Nginx 用上它。最常见的问题只有几类:证书链没放全、私钥拿错、配置仍指向旧文件,或者修改后没有重新加载。把文件和配置对上,通常就能顺利完成安装。
这篇适合自己维护 Nginx 的用户。如果网站由宝塔面板管理,通常在“网站 → 对应站点 → SSL”中更新证书和私钥即可,不必照着本文修改面板生成的配置。使用容器运行 Nginx 时,下面的路径和命令也应以容器内的环境为准。
先找到证书、证书链和私钥
在 NestSSL 的证书详情下载证书包后,会看到域名证书 .crt,以及已同步的 域名_ca_bundle.crt 中间证书链。包里是否有 .key 私钥,取决于本站是否保存了对应私钥。
如果缺少中间证书链文件,先回到证书详情点击“同步证书文件”,下载齐全后再继续配置。
如果申请时提交的是自己生成的 CSR,私钥通常还在当时的电脑或服务器上。请使用那一份私钥,重新生成一份不能直接配这张证书。在站内生成并关联了密钥的,可以先检查下载包中是否已有 .key 文件。
下面用 site.crt、ca-bundle.crt 和 private.key 代指这三个文件,执行命令时换成自己的文件名。先看一下证书里的域名和到期日,避免把另一个网站或上一张证书装上去:
openssl x509 -in site.crt -noout -dates -ext subjectAltName
Nginx 需要怎样的证书链
Nginx 的 ssl_certificate 通常应指向包含站点证书和中间证书链的文件。顺序是站点证书在前,中间证书链在后:
cat site.crt ca-bundle.crt > fullchain.pem
请在存放新文件的目录执行,输出文件不要与输入文件同名。合并后,各段 BEGIN CERTIFICATE 和 END CERTIFICATE 应完整、分行保留。私钥单独保存,不要拼进 fullchain.pem。
中间证书链帮助浏览器确认这张证书由受信任的机构签发。少了它,有时自己的电脑能打开,换一部手机或另一款客户端就报“不受信任”。使用下载包中与这张证书配套的链,不要从旧文件里随便复制一段补上。
修改网站实际使用的配置
把新证书和私钥放到 Nginx 能读取、但不能通过网站下载的目录。已有网站建议先保留旧文件,再修改对应站点的证书路径。下面只展示 HTTPS 相关配置,原有的网站目录、反向代理等设置继续保留:
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
# 保留原有的 root、location 或 proxy_pass 配置。
}
server_name 换成实际访问域名,两个文件路径也要换成真实位置。如果一台服务器上有多个网站,确认改的是这个域名对应的 server,不要误改默认站点。
保存后先检查配置:
nginx -t
看到配置检查成功,再重新加载:
nginx -s reload
若提示 nginx: command not found,请使用实际安装路径下的 Nginx 程序。检查和重新加载应针对同一套正在运行的 Nginx。
报错时先看这几处
出现 key values mismatch,先检查是否拿错私钥,再确认 fullchain.pem 最前面是不是站点证书。文件不存在就检查路径;Permission denied 则检查目录和文件权限,让 Nginx 主进程能够读取即可,不要把私钥改成所有用户可读。
配置检查失败时,先修正报错,不要继续重载或直接重启。只替换文件而没有成功重新加载,Nginx 仍可能继续使用内存里的旧证书。
完成后,用浏览器打开实际域名,查看证书到期日,并访问几个常用页面。如果网站前面用了 CDN 或 ESA,浏览器看到的是云平台上的证书。云平台上那张如果也需要更换,要在那里单独更新,清理网页缓存不会替您完成这一步。