nginx 实现蓝绿部署的关键是通过配置层毫秒级切换 upstream,不重启服务、不影响旧连接;需准备隔离的蓝(8081)绿(8082)环境,配置独立 upstream,切换时仅修改 proxy_pass 并 reload。

在 Linux 上用 Nginx 实现 Blue-Green Deployment 的无损切换,关键不在于重启服务或改代码,而是在配置层做一次毫秒级的路由指向变更。整个过程旧连接不受影响,用户无感知,回滚也只需反向操作。
准备两套隔离的后端环境
蓝环境(blue)和绿环境(green)必须完全独立运行,端口不能冲突,建议用不同端口或不同 IP 区分:
- 蓝环境:启动旧版本服务,监听 8081,例如
python3 app.py --port=8081 - 绿环境:部署新版本服务,监听 8082,例如
python3 app.py --port=8082 - 两个服务都需提供健康检查接口(如
/healthz),确保可被 Nginx 或外部探活调用
配置 Nginx 的 upstream 分组
在 /etc/nginx/conf.d/app.conf 中定义两组 upstream,分别对应蓝、绿:
upstream blue {
server 127.0.0.1:8081;
}
<p>upstream green {
server 127.0.0.1:8082;
}</p><p>server {
listen 80;
location / {
proxy_pass <a href="https://www.php.cn/link/3f48490b4fb6c7afacb9203339086317">https://www.php.cn/link/3f48490b4fb6c7afacb9203339086317</a>; # 当前默认走蓝环境
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}</p>
注意:不要把两个 server 写进同一个 upstream,否则失去环境隔离性,无法实现真正的蓝绿语义。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
执行流量切换(零中断)
确认绿环境已就绪(curl http://localhost:8082/healthz 返回 200)后,仅需两步:
- 编辑配置,将
proxy_pass https://www.php.cn/link/3f48490b4fb6c7afacb9203339086317;改为proxy_pass http://green; - 执行重载:
sudo nginx -s reload(不是 restart)
该操作毫秒级生效,已有 TCP 连接继续处理完请求,新连接全部导向绿环境。Nginx 不会丢包、不中断 SSL 握手、不重置长连接。
配套保障动作不可少
光切流量不够,还需几个支撑点让切换真正可控:
-
自动健康检查:在切换前脚本化验证
/healthz,失败则中止流程 - 监控看板联动:切换后 2 分钟内盯紧错误率、P95 延迟、5xx 比例,异常值触发告警
- 保留蓝环境至少 15 分钟:不立即关停,留作热备;回滚只需改回配置 + reload
-
日志标记环境标识:后端服务在 access log 中打上
env=blue或env=green,便于问题归因
不复杂但容易忽略。核心就是“环境分离 + 配置即开关”,剩下的交给 Nginx 的 reload 机制兜底。










