1. 基本思路
- 配置两个版本:将旧版本和新版本的应用都部署在不同的服务器或端口上。
- 控制流量分配:使用 Nginx 的负载均衡功能,通过配置控制流量的分配比例,以实现灰度发布。
2. 配置示例
假设你有两个版本的应用,旧版本运行在 192.168.1.100:80
,新版本运行在 192.168.1.101:80
。
1. 基础配置
http {
upstream old_version {
server 192.168.1.100:80;
}
upstream new_version {
server 192.168.1.101:80;
}
server {
listen 80;
location / {
# 控制流量分配
# 例如,80%流量到旧版本,20%流量到新版本
set $backend old_version;
if ( $request_uri ~* "/new/") {
set $backend new_version;
}
proxy_pass http://$backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
2. 动态流量调整
可以使用 split_clients
模块实现更灵活的流量分配:
http {
upstream old_version {
server 192.168.1.100:80;
}
upstream new_version {
server 192.168.1.101:80;
}
server {
listen 80;
split_clients "${remote_addr}AAA" $backend {
80% old_version;
20% new_version;
}
location / {
proxy_pass http://$backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
3. ⚠️
- 健康检查:确保新版本在发布之前已通过充分的健康检查。
- 监控:实时监控用户反馈和应用表现,以便快速回滚或调整发布策略。
- 用户体验:灰度发布期间,尽量减少对用户的影响,避免用户体验上的显著差异。
逐步将流量从旧版本迁移到新版本,实现平滑的灰度发布。