当前位置: 首页 > news >正文

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
http://www.zskr.cn/news/175256.html

相关文章:

  • 8个降aigc工具推荐!继续教育人群高效避坑指南
  • C++ 中三法则五法则零法则
  • 2025年靠谱太阳能路灯生产厂排行榜,新测评精选太阳能路灯制造厂推荐 - mypinpai
  • yolov11热力图分析:借助PyTorch-CUDA-v2.7定位检测盲区
  • 2025Q4成都财税口碑榜推荐:狼途腾双资质标杆,高性价比+好口碑领跑 - 品牌智鉴榜
  • AI爬虫“外挂“来了!Firecrawl让数据获取像聊天一样简单,大模型开发者必看
  • 2025年立式液压打包机正规厂家推荐:液压打包机靠谱厂家有哪些? - 工业推荐榜
  • 2025/9/4日 每日总结 设计模式实践:抽象工厂模式之人种创建案例解析
  • 【必看收藏】网络安全学习宝典:从入门到精通的十大岗位详解与实战资源包
  • Dockerfile解析:PyTorch-CUDA-v2.7镜像是如何构建的?
  • 智然达智能清洁设备功能多吗?耐用吗?靠谱商用清洁机器人品牌排行榜 - 工业设备
  • PyTorch-CUDA-v2.7镜像助力高校科研团队高效开展AI研究
  • ue 动作 动画学习笔记
  • PyTorch-CUDA-v2.7镜像优化CUDA内存池,减少OOM风险
  • 简单理解:嵌入式寄存器 “精准清零单个位” 的标准写法 —— 既达到目的,又不干扰其他功能,以及为什么不能直接赋值的原因
  • git diff查看修改内容:在PyTorch-CUDA-v2.7环境中进行版本控制
  • 今天是软件需求课的最后一次随堂测试
  • AGV叉车物联网远程监控系统方案
  • 不止于代码-如何用 Trae IDE与Agent重塑软件需求工程
  • 废弃矿山光伏电站远程监控管理系统方案
  • 不知道怎么选上海装修公司?最新业主口碑实测推荐! - 速递信息
  • 【openGauss】如何在openGauss/PostgreSQL手动清理XLOG/WAL 文件?
  • 【权威榜单】微生物实验室装修|设计|建设哪家好,哪个性价比高,知名品牌口碑推荐TOP3 - 品牌推荐大师1
  • 谷歌学术搜索:高效检索学术文献的专业工具与使用指南
  • 想了解上海装修公司十大排名?2025最新实测清单来了 - 速递信息
  • 有哪些可靠的GEO贴牌代理厂家? - 源码云科技
  • 工业互联网平台下冲压工艺仿真的应用与实践
  • 计算机毕业设计springboot基于的高校人事管理系统的设计与实现 高校教职工数字化管理平台的设计与实现——基于SpringBoot框架 面向高校的人力资源信息管理系统构建与研发
  • PyTorch-CUDA-v2.7镜像SSH远程连接教程,支持团队协作开发
  • 如何辨别GEO贴牌代理的真伪? - 源码云科技