当前位置: 首页 > 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.jsqmd.com/news/159926/

相关文章:

  • PyTorch-CUDA-v2.7镜像启用CUDA Graph,减少内核启动开销
  • 2025年新中式家具品牌排行榜,库岸家具新中式家具口碑怎么样测评推荐 - 工业品网
  • transformer位置编码探究:在PyTorch-CUDA-v2.7中动手实验
  • 别再只做Demo了!RAG技术工业化落地全解析,大模型开发者必备
  • APP测试设计要点
  • 【必看收藏】网络安全学习宝典:从入门到精通的十大岗位详解与实战资源包
  • 2025年太阳能路灯供应商推荐,太阳能路灯来图定制全解析 - 工业品牌热点
  • 实现 instanceof 操作符
  • 【零基础入门】2024最新Java+大模型实战:从零搭建MCP服务器,让AI助手直接调用你的业务系统!
  • C++ 中三法则五法则零法则
  • 2026年求婚钻戒推荐:价值观驱动下的五大选择 - 品牌企业推荐师(官方)
  • yolov11热力图分析:借助PyTorch-CUDA-v2.7定位检测盲区
  • 2025年靠谱太阳能路灯生产厂排行榜,新测评精选太阳能路灯制造厂推荐 - mypinpai
  • 2025Q4成都财税口碑榜推荐:狼途腾双资质标杆,高性价比+好口碑领跑 - 品牌智鉴榜
  • 2025年绞肉机推荐:口碑与实力兼具的品牌,绞肉机厂家找哪家博锐市场认可度高 - 品牌推荐师
  • 6万预算钻戒推荐:2026理性消费新标杆 - 品牌企业推荐师(官方)
  • AI爬虫“外挂“来了!Firecrawl让数据获取像聊天一样简单,大模型开发者必看
  • 软件测试,银行测试到底能不能长期做下去?
  • 2025年立式液压打包机正规厂家推荐:液压打包机靠谱厂家有哪些? - 工业推荐榜
  • GitHub Wiki文档编写:基于PyTorch-CUDA-v2.7生成使用手册
  • 2025/9/4日 每日总结 设计模式实践:抽象工厂模式之人种创建案例解析
  • 2025重庆房屋结构加固公司TOP5推荐:技术、售后双维度测评 - 工业推荐榜
  • 2025/9/18日 每日总结 设计模式实践:抽象工厂模式之人种创建案例解析
  • Cookie Session Token的区别
  • 2025年南京装修公司服务排行榜,新测评精选家装公司推荐 - myqiye
  • ICLR史无前例!中国团队站上C位,全球AI顶会首次为它设专场
  • Dockerfile解析:PyTorch-CUDA-v2.7镜像是如何构建的?
  • SSH隧道转发:安全访问远程PyTorch-CUDA-v2.7开发环境
  • JAVA助力:羽毛球馆自助预约系统源码
  • PyTorch-CUDA-v2.7镜像助力高校科研团队高效开展AI研究