Nginx 6 种发布方式(滚动发布、蓝绿发布(Blue/Green)、金丝雀发布(Canary 灰度)等) 实操全集(配置 + 分步操作 + 回滚)

统一前置命令(所有发布通用)

复制代码
# 检查配置
nginx -t
# 热重载(无停机)
nginx -s reload
# 快速停止/重启(尽量不用)
nginx -s stop
systemctl restart nginx

统一后端示例:

  • 稳定旧版:10.0.0.10:8080
  • 测试新版:10.0.0.11:8080

一、滚动发布(Rolling)

核心特点

无需额外机器、资源占用最低;分批替换节点,平滑更新;回滚稍麻烦,适合日常迭代。

完整 Nginx 配置

复制代码
upstream app {
    # 存量旧节点
    server 10.0.0.10:8080;
    server 10.0.0.12:8080;
}

server {
    listen 80;
    server_name demo.com;

    location / {
        proxy_pass http://app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

详细操作步骤

  1. 先下线一台旧节点,停止应用、部署新版本;

  2. 修改 upstream,替换单台节点为新版 IP:

    复制代码
    upstream app {
        server 10.0.0.11:8080; # 新版
        server 10.0.0.12:8080; # 旧版保留
    }
  3. nginx -t 校验配置 → nginx -s reload

  4. 观察日志、错误率、接口稳定性,无异常继续;

  5. 重复上面步骤,逐台替换剩余旧节点,直至全部更新完成。

回滚操作

逐台下线新版节点,重新部署旧代码,改回旧 IP,逐次重载 Nginx,分批恢复。


二、蓝绿发布(Blue/Green)

核心特点

两套环境独立部署;秒级全量切换、极速回滚;适合核心业务、强稳定性要求。

  • 蓝环境:当前线上稳定版
  • 绿环境:待上线新版本

完整 Nginx 配置

复制代码
# 蓝:旧版
upstream app_blue {
    server 10.0.0.10:8080;
}
# 绿:新版
upstream app_green {
    server 10.0.0.11:8080;
}

server {
    listen 80;
    server_name demo.com;

    location / {
        proxy_pass http://app_blue; # 默认走旧版蓝环境
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

详细操作步骤

  1. 提前在绿环境部署新版本,自测、接口、日志全量验证;

  2. 确认绿环境无 Bug,修改 proxy_pass 切换到绿环境:

    复制代码
    proxy_pass http://app_green;
  3. 校验配置 nginx -tnginx -s reload

  4. 全量流量切到新版,持续观察监控 30 分钟 +;

  5. 稳定无误后,绿环境作为新线上环境,蓝环境留作备用。

回滚操作

直接改回 proxy_pass http://app_blue,重载 Nginx,瞬间切回旧版。


三、金丝雀发布(Canary 灰度)

两种常用方案:权重灰度(全员比例)Header/Cookie 精准灰度(内部测试)

方案 1:按权重流量灰度(10% 放量)

完整配置
复制代码
upstream app {
    server 10.0.0.10:8080 weight=90; # 旧版 90%
    server 10.0.0.11:8080 weight=10; # 新版 10%
}

server {
    listen 80;
    server_name demo.com;
    location / {
        proxy_pass http://app;
    }
}
操作步骤
  1. 新版服务启动正常,写入 upstream;
  2. 设置小权重(10%/5%),重载 Nginx;
  3. 监控错误、耗时、业务日志;
  4. 逐步调大权重:10% → 30% → 50% → 100%;
  5. 最终旧版权重改为 0 或直接下线旧节点。
回滚

调低新版权重为 0,或直接删除新版 upstream 节点。


方案 2:Header/Cookie 精准灰度(仅测试人员访问新版)

完整配置
复制代码
upstream app_old {
    server 10.0.0.10:8080;
}
upstream app_new {
    server 10.0.0.11:8080;
}

server {
    listen 80;
    server_name demo.com;

    location / {
        # 1. 请求头携带 X-Canary=1 走新版
        if ($http_x_canary = "1") {
            proxy_pass http://app_new;
            break;
        }
        # 2. Cookie 携带 canary=on 走新版
        if ($cookie_canary = "on") {
            proxy_pass http://app_new;
            break;
        }
        # 默认所有用户走旧版
        proxy_pass http://app_old;
    }
}
操作步骤
  1. 配置写入 Nginx,重载生效;
  2. 测试人员请求时加请求头:X-Canary: 1 访问新版;
  3. 内部验证完毕,再切权重全量放量;
回滚

注释两段 if 规则,重载 Nginx,全部流量回归旧版。


四、影子发布(流量镜像)

核心特点

生产流量复制一份给新版,只压测不影响用户;用于新版本性能、数据校验,零风险。

完整 Nginx 配置

复制代码
upstream app_online {
    server 10.0.0.10:8080; # 正式生产
}
upstream app_shadow {
    server 10.0.0.11:8080; # 影子新版
}

server {
    listen 80;
    server_name demo.com;

    location / {
        proxy_pass http://app_online;
        mirror /shadow_copy; # 复制流量
    }

    # 内部镜像路由,不返回给用户
    location = /shadow_copy {
        internal;
        proxy_pass http://app_shadow$request_uri;
        proxy_set_header X-Shadow "true";
    }
}

详细操作步骤

  1. 新版部署完成,启动影子服务;
  2. 写入 mirror 镜像配置,重载 Nginx;
  3. 观察影子服务日志、数据库写入、接口报错;
  4. 长期稳定无异常后,再走金丝雀 / 蓝绿正式切流量。

回滚

删除 mirror /shadow_copy; 配置,重载即可关闭流量镜像。


五、A/B 测试发布

核心特点

按 IP、用户规则固定分流,做版本对比、UI / 功能测评。

完整配置(按客户端 IP 奇偶分流)

复制代码
upstream app_a {
    server 10.0.0.10:8080; # A版本
}
upstream app_b {
    server 10.0.0.11:8080; # B版本
}

server {
    listen 80;
    server_name demo.com;
    location / {
        # 末尾偶数IP走A,奇数走B
        if ($remote_addr ~ [02468]$) {
            proxy_pass http://app_a;
        }
        proxy_pass http://app_b;
    }
}

操作步骤

  1. 双版本部署完毕;
  2. 配置分流规则,重载 Nginx;
  3. 长期收集两个版本的业务数据、转化率、错误率;
  4. 择优全量上线,淘汰差的版本。

回滚

统一注释分流 if,全部代理到稳定版本。


六、功能开关发布(Feature Toggle)

核心特点

不用改 Nginx 大量配置,代码层控制功能启停,配合 Nginx 路径隔离新功能。

1. Nginx 路径隔离配置

复制代码
server {
    listen 80;
    server_name demo.com;

    # 新功能独立路由隔离
    location /new-api/ {
        proxy_pass http://app_new;
    }
    # 老业务默认旧版
    location / {
        proxy_pass http://app_old;
    }
}

2. 操作步骤

  1. 代码内添加功能开关(配置中心 / 本地配置);
  2. 新功能关闭状态下打包部署;
  3. Nginx 隔离新接口路径,小范围测试;
  4. 确认稳定后,后台开启功能开关,全量生效。

回滚

关闭代码内功能开关,即刻生效,无需改 Nginx、无需重启服务。


六种发布方式 快速选型总结

发布方式 适用场景 操作难度 回滚速度
滚动发布 日常迭代、非核心服务
蓝绿发布 核心业务、金融 / 支付、需快速回滚 秒级
金丝雀灰度 新版本上线、风险可控放量
影子发布 新版性能测试、数据验证 秒级
A/B 测试 界面改版、活动策略对比
功能开关 频繁迭代、临时功能上下线 极低 即时

日常运维最简落地建议

  1. 中小型业务:优先 金丝雀权重 + 蓝绿发布 组合使用;
  2. 大流量核心业务:影子验证 → 金丝雀灰度 → 蓝绿全量
  3. 所有变更必做:nginx -t 校验再重载,杜绝配置报错断服务;
  4. 所有灰度 / 发布,全程监控:错误码、响应时间、QPS、业务日志。
相关推荐
宁波阿成1 小时前
在ubuntu22.04源码级安装sub2api
linux·运维·ubuntu·ai·api·token·中转站
a8a3022 小时前
Laravel5.x进化史:核心特性全解析
nginx·php·laravel
李日灐2 小时前
< 7 > Linux 开发工具:git 版本控制器 和 cgdb/gdb 调试器
linux·运维·服务器·开发语言·git·调试器·gdb/cgdb
xcbrand3 小时前
餐饮品牌全案公司哪家可靠
运维·python
apl3593 小时前
GUI 型 DevOps 平台的天花板,Ashby 在 1956 年就画好了
运维·devops
云动课堂3 小时前
【运维实战】MySQL 8.0 数据库 · 一键自动化部署方案 (适配银河麒麟 V10 / 龙蜥 8 / Rocky Linux 8 / CentOS 8)
linux·运维·数据库
cui_ruicheng3 小时前
Linux进程间通信(一):管道与IPC基础
linux·运维·服务器
一叶龙洲3 小时前
Ubuntu开机无法用向日葵远程控制
linux·运维·ubuntu
计算机安禾4 小时前
【Linux从入门到镜头】第29篇:文本处理三剑客(下)——awk 数据处理神器
linux·运维·服务器