在Docker中实现Nginx平滑重启的几种方法

 更新时间:2025年09月22日 09:27:13   作者:檀越@新空间  
关于平滑重启的意思,就是指已经连接到nginx的请求将继续使用旧的配置,待客户端服务完成后,旧的工作进程将关闭,下次请求将采用新的配置,本文给大家介绍了在Docker中实现Nginx平滑重启的几种方法,需要的朋友可以参考下

在 Docker 中实现 Nginx 无感重启(平滑重启)的几种方法:

1. 使用标准的 reload 命令(推荐)

您当前使用的方式是正确的,这是最标准的做法:

# 检查配置文件语法
docker exec agi-nginx nginx -t

# 平滑重启(无中断服务)
docker exec agi-nginx nginx -s reload

这种方式会:

  • 主进程重新加载配置
  • 启动新的工作进程处理新请求
  • 优雅关闭旧的工作进程(等待现有连接完成)

2. 使用 docker-compose 重启

如果使用 docker-compose:

# 重启单个容器
docker-compose restart nginx

# 或者重新创建容器(会读取最新配置)
docker-compose up -d --force-recreate nginx

3. 完整的无感重启脚本

#!/bin/bash

CONTAINER_NAME="agi-nginx"

# 检查配置语法
if docker exec $CONTAINER_NAME nginx -t; then
    echo "配置文件检查通过,开始平滑重启..."

    # 发送 reload 信号
    docker exec $CONTAINER_NAME nginx -s reload

    # 等待重启完成
    sleep 2

    # 检查 Nginx 状态
    docker exec $CONTAINER_NAME nginx -t
    echo "Nginx 平滑重启完成"
else
    echo "配置文件有错误,请检查配置"
    exit 1
fi

4. 使用健康检查确保重启成功

在 docker-compose.yml 中添加健康检查:

version: "3"
services:
  nginx:
    image: nginx:latest
    container_name: agi-nginx
    ports:
      - "80:80"
      - "443:443"
    healthcheck:
      test: ["CMD", "nginx", "-t"]
      interval: 30s
      timeout: 10s
      retries: 3

5. 零停机部署策略

对于生产环境,可以考虑:

# 蓝绿部署
# 1. 启动新版本的 Nginx 容器
docker run -d --name nginx-new nginx:new-version

# 2. 逐步将流量切换到新容器
# 3. 停止旧容器
docker stop agi-nginx

注意事项

  1. 配置文件位置:确保配置文件通过 volume 挂载,这样修改后立即生效
  2. 日志文件:确保日志文件也通过 volume 挂载,避免重启丢失日志
  3. SSL 证书:如果使用 SSL,确保证书文件正确挂载
  4. 连接保持:配置中设置 worker_shutdown_timeout 确保优雅关闭
# nginx.conf 中的相关配置
worker_processes auto;
worker_shutdown_timeout 30s;  # 优雅关闭超时时间

events {
    worker_connections 1024;
}

http {
    # 其他配置...
}

您当前使用的方式 docker exec agi-nginx nginx -s reload 是最推荐的做法,它确实实现了无感重启。

到此这篇关于在Docker中实现Nginx平滑重启的几种方法的文章就介绍到这了,更多相关Nginx平滑重启方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx对网段内ip的连接数限流配置详解

    Nginx对网段内ip的连接数限流配置详解

    这篇文章主要介绍了Nginx对网段内ip的连接数限流配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Nginx静态资源服务器的实现示例

    Nginx静态资源服务器的实现示例

    静态资源即非服务器动态生成的文件,本文主要介绍了Nginx静态资源服务器的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Nginx 访问 /root/下 403 Forbidden问题解决

    Nginx 访问 /root/下 403 Forbidden问题解决

    在使用Nginx作为Web服务器时,可能会遇到403 Forbidden错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • nginx location 配置 正则表达式实例详解

    nginx location 配置 正则表达式实例详解

    本文通过实例代码给大家介绍了nginx location 配置 正则表达式的问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • Keepalived实现Nginx负载均衡高可用的示例代码

    Keepalived实现Nginx负载均衡高可用的示例代码

    这篇文章主要介绍了Keepalived实现Nginx负载均衡高可用的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Nginx基础配置(main、events、http、server、location)

    Nginx基础配置(main、events、http、server、location)

    本文主要介绍了Nginx基础配置(main、events、http、server、location),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Nginx服务启动和停止实现

    Nginx服务启动和停止实现

    使用Nginx的过程中,我们可能总是需要修改nginx配置文件,然后不停地启动或者停止nginx服务,本文就来介绍一下,感兴趣的可以了解一下
    2023-11-11
  • 详解Nginx中常见负载均衡策略配置与使用场景

    详解Nginx中常见负载均衡策略配置与使用场景

    负载均衡(Load Balancing)成为确保系统高可用和高性能的关键技术,本文将详细讲解 Nginx 的常见负载均衡策略,并附带示例配置与适用场景,需要的小伙伴可以了解下
    2025-09-09
  • 你知道Nginx吗,利用Nginx反向代理的操作方法

    你知道Nginx吗,利用Nginx反向代理的操作方法

    Nginx是一个高性能的HTTP和反向代理服务器,可以用于反向代理,客户端只与Nginx交互,而不知道后端服务器的存在,以下是一个简单的Nginx反向代理配置示例,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • nginx异步io配置全过程

    nginx异步io配置全过程

    这篇文章主要介绍了nginx异步io配置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07

最新评论