news 2026/6/10 1:45:19

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/6/9 18:45:56

PyTorch-CUDA-v2.7镜像支持ONNX导出,便于跨平台部署

PyTorch-CUDA-v2.7 镜像集成 ONNX 导出:打通训练到部署的全链路 在深度学习项目从实验走向落地的过程中,开发者常常面临一个尴尬的局面:模型在本地训练得再好,一旦要部署到服务器、边缘设备甚至移动端,就会遇到环境依…

作者头像 李华
网站建设 2026/6/9 20:57:03

接口测试流程和步骤

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是接口测试我们要想知道接口测试怎么做,首先要明白接口测试是什么?一般像系统内的组件接口数据交互测试、不同系统与系统之间的接口数据交…

作者头像 李华
网站建设 2026/6/9 21:08:12

接口测试:使用Requests库发送POST请求

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快POST请求用于向服务器提交数据,比如提交一个表单新建一个用户、或修改一个用户信息等操作。对于POST请求,我们可以通过浏览器开发者工具或者…

作者头像 李华
网站建设 2026/6/9 19:49:17

基于RAG技术打造知识库问答系统:Python实现与工程化部署详解

大家好!今天我们来学习如何使用Python实现一个基于RAG(检索增强生成)的知识库问答系统。这个系统能够基于我们自己的文档资料来回答问题,让AI更懂"我们的业务"。 1. RAG技术简介 RAG技术就像是给AI装了一个"活字典"。不同于传统大…

作者头像 李华
网站建设 2026/6/9 19:51:19

Jmeter基础:Jmeter聚合报告详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、聚合报告介绍在使用JMeter进行性能测试时,聚合报告(Aggregate Report)可以说是必用的监听器。(1)聚合报告的生成方式聚合报…

作者头像 李华