news 2026/4/18 1:27:44

Docker部署下,手动更新SSL证书,如何自动reload Nginx

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker部署下,手动更新SSL证书,如何自动reload Nginx

一、基本背景

如下的应用场景下(linux服务器):

1. web应用是通过Docker 容器部署;

2. web 应用通过宿主机上的(非本容器)共享Nginx服务器进行 https的web服务

即:Nginx运行在宿主机上,并在宿主机指定目录管理ssl认证文件。

3.ssl证书的续约是从CA服务商申请并下载的pem及key文件

4. ssl证书的更新是通过容器web应用界面上传更新(通过 Docker volume 挂载关联)

这样就存在一个直接的问题,更新了宿主机上的ssl证书后,Nginx必须要重新reload,新的ssl证书才能起作用,那么如何再上传更新了ssl证书后,系统自动reload,而无需单独手工reload nginx?

最佳方案:inotifywait+ systemd 服务(宿主机 Nginx 优化)

工作原理:inotifywait 是 Linux 下基于 inotify 机制的命令行工具,用于实时监听文件或目录的增删改等事件,常用于自动化响应文件变化,基本的工作原理就是由inotifywait监控指定的ssl文件状态,一旦发现ssl文件被更新,就自动启动reload Nginx指令,这样就可以完成上述的需求。

二、安装步骤

步骤1:安装 inotify-tools (以 阿里云linux服务为例)

sudo yum install -y epel-release && sudo yum install -y inotify-tools

注:如果阿里云服务器已经安装了自定义的epel包,则可直接 sudo yum install -y inotify-tools

步骤 2:创建监控脚本

创建文件:/usr/local/bin/watch-cert-reload-nginx.sh

以下为文件内容:

#!/bin/bash CERT_DIR="/cert" CERT_FILE="$CERT_DIR/fullchain.pem" KEY_FILE="$CERT_DIR/privkey.pem" # 确保证书文件存在(避免启动失败) for f in "$CERT_FILE" "$KEY_FILE"; do if [ ! -f "$f" ]; then echo "$(date): ERROR: Required cert file missing: $f" >&2 exit 1 fi done echo "$(date): Monitoring $CERT_FILE and $KEY_FILE for changes..." # 监控两个文件的修改、属性变更(如 chmod)、覆盖写入等 inotifywait -m -e modify,attrib,move,create \ --format '%w%f' \ "$CERT_FILE" "$KEY_FILE" | while read CHANGED_FILE; do echo "$(date): Certificate file changed: $CHANGED_FILE" # 先测试配置是否合法 if nginx -t; then echo "$(date): Reloading Nginx..." systemctl reload nginx else echo "$(date): ❌ Nginx config test failed! Skip reload." >&2 fi

注1:ssl文件的路径及文件名需根据实际的情况修改。

注2: 如果Nginx非通过systemd控制(例如是由宝塔linux面板安装),则需要将 systemctl reload nginx更换为 nginx -s reload

步骤 3:设置权限

sudo chmod +x /usr/local/bin/watch-cert-reload-nginx.sh

步骤 4:创建 systemd 服务

创建/etc/systemd/system/nginx-cert-watcher.service

文件内容如下:

[Unit]
2Description=Auto-reload Nginx when SSL certificates change
3After=network.target nginx.service
4
5[Service]
6Type=simple
7User=root
8ExecStart=/usr/local/bin/watch-cert-reload-nginx.sh
9Restart=always
10RestartSec=5
11StandardOutput=journal
12StandardError=journal
13
14[Install]
15WantedBy=multi-user.target

步骤 5:启用并启动服务

sudo systemctl daemon-reload sudo systemctl enable --now nginx-cert-watcher.service
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 12:09:00

web网页如何禁止别人移除水印

在网页中禁止用户移除水印是一个复杂的挑战,因为前端代码和页面内容本质上是由用户控制的。无法做到绝对禁止,但可以通过以下技术手段增加移除难度,并结合法律手段保护权益: 一、前端技术防护(增加移除成本&#xff09…

作者头像 李华
网站建设 2026/4/18 5:37:59

零基础如何快速上手制作gif?GIF在线制作全攻略

在日常沟通、社交媒体分享或是工作汇报中,生动有趣的GIF图总能比静态图片更吸睛,轻松传递情绪与信息。相比于专业软件的复杂操作,在线制作GIF无需下载安装,打开gif在线制作工具就能上手,大大降低了制作门槛。下面就为大…

作者头像 李华
网站建设 2026/4/18 11:52:12

浅谈高速公路服务区充电桩瓶颈及改进对策

唐雪阳安科瑞电气股份有限公司 上海嘉定 201801摘 要:随着公民环境保护意识增强和能源结构的转型,新能源汽车作为一种环保、节能的交通工具,逐渐成为汽车产业的发展趋势。然而,高速公路服务区新能源汽车充电桩的建设和运营面临着…

作者头像 李华
网站建设 2026/4/18 7:39:19

别再只做Demo了!RAG技术工业化落地全解析,大模型开发者必备

在这篇 2025 年最新的 RAG 综述中,研究者系统梳理了过去一年的技术进展,提出了新的分析视角,并探讨了未来的发展趋势。本系列文章对其进行了解读和日常案例挖掘。 在这篇文章里,我们结合吴恩达最新 RAG 教程,聚焦一个更…

作者头像 李华
网站建设 2026/4/18 12:05:58

GitHub Wiki文档编写:基于PyTorch-CUDA-v2.7生成使用手册

GitHub Wiki文档编写:基于PyTorch-CUDA-v2.7生成使用手册 在深度学习项目开发中,最让人头疼的往往不是模型设计本身,而是环境配置——明明代码没问题,却因为CUDA版本不匹配、cuDNN缺失或PyTorch编译错误导致训练跑不起来。这种“在…

作者头像 李华
网站建设 2026/4/17 20:05:00

ICLR史无前例!中国团队站上C位,全球AI顶会首次为它设专场

ICLR史无前例!中国团队站上C位,全球AI顶会首次为它设专场 新智元 新智元 2025年12月29日 14:21 北京 新智元报道 编辑:Aeneas 好困 【新智元导读】史上首次,ICLR成立后设立机制设计相关Workshop,全球顶流学者众神…

作者头像 李华