灰度发布时用nginx做临时跳转,核心是302重定向:它告知浏览器“本次跳转,下次仍回原址”,不影响seo且灵活控流;须用return 302(非permanent),目标带完整协议,配合$request_uri保留路径参数,并优先在location块内配置或用map预定义变量。

灰度发布时用 Nginx 做临时跳转,核心就是用 302 重定向——它告诉浏览器“这次去别处看看,但下次还回原来地址”,既不影响 SEO,又能灵活控制流量。
302 重定向配置要点
- 必须用
return 302或rewrite ... redirect,不能用permanent - 推荐优先用
return 302,性能更好、语义更清晰、配置更简洁 - 跳转目标要带完整协议(如
https://),避免相对路径引发协议错误 -
$request_uri可保留原始路径和查询参数,确保用户访问/api/v2/user?id=123也能精准跳到新地址对应路径
典型灰度场景配置示例
-
按 Host 或域名做灰度跳转(比如只对
beta.example.com用户跳)server { listen 80; server_name beta.example.com; return 302 https://gray.new-site.com$request_uri; } -
按请求路径做灰度(比如
/admin/下所有请求走灰度)location ^~ /admin/ { return 302 https://gray.new-site.com$request_uri; } -
按请求头或参数做灰度(需配合
if判断,慎用但可行)if ($arg_version = "v2") { return 302 https://gray.new-site.com$request_uri; }
⚠️ 注意:
if在 location 外使用有坑,建议把灰度逻辑尽量放在location块内,或改用map指令预定义变量提升健壮性。
和 301 的关键区别别搞混
- 302:浏览器下次还会来原地址,搜索引擎不转移权重,适合灰度、维护页、A/B 测试
- 301:浏览器和搜索引擎都会记住新地址,旧 URL 权重逐步迁移到新地址,不适合灰度
不复杂但容易忽略。











