在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平滑重启方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Centos7安装、卸载nginx及配置,配置成系统服务方式(一步到位)

    Centos7安装、卸载nginx及配置,配置成系统服务方式(一步到位)

    这篇文章主要介绍了Centos7安装、卸载nginx及配置,配置成系统服务方式(一步到位),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Nginx部署负载均衡服务的步骤全解析

    Nginx部署负载均衡服务的步骤全解析

    为了提高系统的可扩展性和可靠性,负载均衡(Load Balancing)成为了必不可少的技术手段之一,本文将详细介绍如何通过Nginx部署负载均衡服务,感兴趣的可以了解下
    2025-06-06
  • Linux配置nginx脚本的操作方法

    Linux配置nginx脚本的操作方法

    正常来说,配置nginx相对来说比较麻烦,这里写一个sh脚本,可以之间完成相关的操作,其中包括,换 nginx的源,加载nginx前置的依赖,同样包含nginx的conf文件配置,这篇文章主要介绍了Linux配置nginx脚本的操作方法,需要的朋友可以参考下
    2024-05-05
  • Nginx应对Permission denied和File not found的配置

    Nginx应对Permission denied和File not found的配置

    这篇文章主要介绍了Nginx应对Permission denied和File not found的错误配置,文中介绍了两个PHP程序使用时出现相关问题后的解决案例,需要的朋友可以参考下
    2015-12-12
  • Windows下Nginx的配置及配置文件部分介绍

    Windows下Nginx的配置及配置文件部分介绍

    这篇文章主要介绍了Windows下Nginx的配置及配置文件部分介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • 详解nginx配置location总结及rewrite规则写法

    详解nginx配置location总结及rewrite规则写法

    本篇文章主要介绍了详解nginx配置location总结及rewrite规则写法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 实现自动定期删除Nginx日志的方法

    实现自动定期删除Nginx日志的方法

    这篇文章主要介绍了自动定期删除Nginx日志的方法,Nginx是一个基于事务的异步的高速服务器软件,需要的朋友可以参考下
    2015-07-07
  • Nginx实现TCP和UDP代理的方法步骤

    Nginx实现TCP和UDP代理的方法步骤

    Nginx 1.9.13 及以上版本支持TCP/UDP代理功能,通过配置监听端口、后端服务器地址等参数,实现客户端请求的转发和响应的返回,下面就来介绍一下如何实现,感兴趣的可以了解一下
    2024-12-12
  • Nginx 中 proxy_intercept_errors 实现后端 502/504 错误的优雅降级

    Nginx 中 proxy_intercept_errors 实现后端 502/

    本文主要介绍了Nginx 中 proxy_intercept_errors 实现后端 502/504 错误的优雅降级,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • nginx 解决首页跳转问题详解

    nginx 解决首页跳转问题详解

    这篇文章主要介绍了nginx 解决首页跳转问题详解的相关资料,需要的朋友可以参考下
    2016-12-12

最新评论