零停机部署需配置nginx upstream启用健康检查(如health_check interval=5 fails=2 passes=2)、least_conn负载策略及max_fails/fail_timeout自动剔除异常节点,并通过ci自动化验证(nginx -t)、平滑重载(nginx -s reload)与蓝绿配置切换实现流量安全过渡。

配置 Nginx 负载均衡器来配合 CI/CD 发布流程,核心是让新版本服务上线时不影响用户访问——也就是实现零停机部署。关键不在“加一台 Nginx”,而在于让它能感知后端服务状态、安全切换流量,并与构建、测试、发布环节自动联动。
定义上游服务组并启用健康检查
在 http 块中声明一组后端应用实例,用 upstream 指令管理,并开启主动健康探测:
- 使用
least_conn或ip_hash策略,避免单点过载或会话中断 - 为每个
server行添加max_fails=2 fail_timeout=30s,让 Nginx 自动剔除异常节点 - 搭配
health_check interval=5 fails=2 passes=2(需启用ngx_http_upstream_health_check_module)可实现更精细的 HTTP 层探活
通过多套配置实现蓝绿或金丝雀发布
不要把所有环境塞进一个配置文件。推荐按环境分目录管理,例如:
-
conf.d/upstreams/production-v1.conf:指向旧版服务集群 -
conf.d/upstreams/production-v2.conf:指向 CI 构建完的新镜像或新端口实例 - 主配置中用
include conf.d/upstreams/production-*.conf;动态加载,CI 流水线只需替换软链接或重载配置即可切流
与 CI 流水线打通的关键动作
每次构建成功后,Nginx 配置本身也要走自动化验证和生效流程:
- 在 CI 脚本中加入
nginx -t -c /etc/nginx/nginx.conf,失败则中断发布 - 用
nginx -s reload而非重启,保证连接平滑过渡;若担心 reload 失败,可先cp当前配置备份 - 结合 Git 版本控制 Nginx 配置,每次变更提交 PR,由 CI 自动 diff 差异并触发预检
配合容器化部署的实用技巧
当后端运行在 Docker 或 Kubernetes 中,Nginx 可作为边缘反向代理直接对接:
- 将容器启动后的实际 IP:PORT 写入模板文件(如用
envsubst渲染upstream地址),避免硬编码 - 在 Jenkins/GitLab CI 的 deploy 阶段,先拉起新容器,再调用 API 更新 Nginx upstream,最后下线旧容器
- 对前端静态资源,可让 CI 直接同步构建产物到 Nginx 的
html/目录,配合try_files $uri /index.html;支持 SPA 路由











