随着免费 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.key3. 热重载 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 安全调用已恢复正常。