统一前置命令(所有发布通用)
# 检查配置
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;
}
}
详细操作步骤
-
先下线一台旧节点,停止应用、部署新版本;
-
修改
upstream,替换单台节点为新版 IP:upstream app { server 10.0.0.11:8080; # 新版 server 10.0.0.12:8080; # 旧版保留 } -
nginx -t校验配置 →nginx -s reload; -
观察日志、错误率、接口稳定性,无异常继续;
-
重复上面步骤,逐台替换剩余旧节点,直至全部更新完成。
回滚操作
逐台下线新版节点,重新部署旧代码,改回旧 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;
}
}
详细操作步骤
-
提前在绿环境部署新版本,自测、接口、日志全量验证;
-
确认绿环境无 Bug,修改
proxy_pass切换到绿环境:proxy_pass http://app_green; -
校验配置
nginx -t→nginx -s reload; -
全量流量切到新版,持续观察监控 30 分钟 +;
-
稳定无误后,绿环境作为新线上环境,蓝环境留作备用。
回滚操作
直接改回 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;
}
}
操作步骤
- 新版服务启动正常,写入 upstream;
- 设置小权重(10%/5%),重载 Nginx;
- 监控错误、耗时、业务日志;
- 逐步调大权重:10% → 30% → 50% → 100%;
- 最终旧版权重改为 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;
}
}
操作步骤
- 配置写入 Nginx,重载生效;
- 测试人员请求时加请求头:
X-Canary: 1访问新版; - 内部验证完毕,再切权重全量放量;
回滚
注释两段 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";
}
}
详细操作步骤
- 新版部署完成,启动影子服务;
- 写入 mirror 镜像配置,重载 Nginx;
- 观察影子服务日志、数据库写入、接口报错;
- 长期稳定无异常后,再走金丝雀 / 蓝绿正式切流量。
回滚
删除 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;
}
}
操作步骤
- 双版本部署完毕;
- 配置分流规则,重载 Nginx;
- 长期收集两个版本的业务数据、转化率、错误率;
- 择优全量上线,淘汰差的版本。
回滚
统一注释分流 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. 操作步骤
- 代码内添加功能开关(配置中心 / 本地配置);
- 新功能关闭状态下打包部署;
- Nginx 隔离新接口路径,小范围测试;
- 确认稳定后,后台开启功能开关,全量生效。
回滚
关闭代码内功能开关,即刻生效,无需改 Nginx、无需重启服务。
六种发布方式 快速选型总结
| 发布方式 | 适用场景 | 操作难度 | 回滚速度 |
|---|---|---|---|
| 滚动发布 | 日常迭代、非核心服务 | 低 | 慢 |
| 蓝绿发布 | 核心业务、金融 / 支付、需快速回滚 | 低 | 秒级 |
| 金丝雀灰度 | 新版本上线、风险可控放量 | 中 | 快 |
| 影子发布 | 新版性能测试、数据验证 | 中 | 秒级 |
| A/B 测试 | 界面改版、活动策略对比 | 中 | 快 |
| 功能开关 | 频繁迭代、临时功能上下线 | 极低 | 即时 |
日常运维最简落地建议
- 中小型业务:优先 金丝雀权重 + 蓝绿发布 组合使用;
- 大流量核心业务:影子验证 → 金丝雀灰度 → 蓝绿全量;
- 所有变更必做:
nginx -t校验再重载,杜绝配置报错断服务; - 所有灰度 / 发布,全程监控:错误码、响应时间、QPS、业务日志。