Skip to content

随着免费 SSL 证书(如 TrustAsia、Let's Encrypt 等)的有效期缩短(通常为 90 天),定期续期和替换证书成为了运维日常。在前端或 Web 应用通过 Docker 容器化部署的场景下,如何快速定位证书路径、替换证书并无缝热重载?本文总结完整实战流程。

一、域名所有权 DNS TXT 验证 ​

在云平台申请免费 SSL 证书时,若选择 DNS 验证方式,需要前往 DNS 解析控制台为域名添加或更新一条 TXT 记录:

  • 主机记录:_dnsauth.api(针对 api.example.com 子域名)
  • 记录类型:TXT
  • 记录值:填写云厂商生成的专属校验哈希串(如 20260816xxxx...)

提示

若之前申请过证书,DNS 列表中可能存在旧的 _dnsauth.api TXT 记录,直接点击修改更新为最新的记录值即可,无需重复添加。验证签发完成后可自行保留或删除。

二、定位 Docker 容器内的证书路径 ​

当证书签发并下载好 Nginx 格式的证书压缩包后,需要确定服务器上证书存放的具体位置。

1. 查看正在运行的 Web 容器 ​

bash
docker ps

找到运行 Nginx / 前端服务的容器(如 app-web)。

2. 检查 Nginx 配置中的证书路径 ​

直接在容器内部执行配置检测与过滤命令:

bash
docker exec -it app-web nginx -T | grep -E "ssl_certificate"

终端通常会输出具体的证书挂载或存放路径:

nginx
ssl_certificate /etc/nginx/ssl/api.pem;
ssl_certificate_key /etc/nginx/ssl/api.key;

三、证书替换与热重载生效 ​

1. 准备新证书文件 ​

将下载的证书解压,按容器内配置的文件名重命名(例如):

  • 将 api.example.com_bundle.crt(或 .pem)重命名为 api.pem
  • 将 api.example.com.key 重命名为 api.key

2. 将证书文件拷贝入容器 ​

将重命名后的证书文件上传至服务器宿主机,随后使用 docker cp 复制进容器覆盖旧证书:

bash
# 复制证书公钥
docker cp api.pem app-web:/etc/nginx/ssl/api.pem

# 复制证书私钥
docker cp api.key app-web:/etc/nginx/ssl/api.key

3. 热重载 Nginx(零停机) ​

执行平滑重载命令,让 Nginx 重新加载证书,无需重启整个容器:

bash
docker exec -it app-web nginx -s reload

四、验证证书生效状态 ​

无需等待浏览器缓存刷新,直接在服务器终端使用 OpenSSL 命令检测 443 端口当前加载的证书有效期:

bash
echo | openssl s_client -servername api.example.com -connect 127.0.0.1:443 2>/dev/null | openssl x509 -noout -dates

输出示例:

text
notBefore=Aug 17 00:00:00 2026 GMT
notAfter=Nov 14 23:59:59 2026 GMT

当 notAfter 显示为最新的到期日期时,说明新证书已正式生效,客户端与前端的 HTTPS 安全调用已恢复正常。

基于 VitePress 构建 · 遵循 CC BY-NC-SA 4.0 许可协议