灰度发布期间Nginx应使用return 302实现临时重定向,核心是按Cookie/请求头/IP等条件精准分流、保留$request_uri传递原始路径与参数、目标地址带完整协议,确保不伤SEO、可随时回退;禁用rewrite和301。
灰度发布期间用 Nginx 做 302 重定向,核心是“临时引导、按需分流、不伤 SEO”,不是把用户永久搬走,而是让部分人先去新环境看看,随时可关掉即刻回退。
直接写 return 302 https://new-site.com$request_uri; 最稳妥:语义明确、性能高、不触发正则解析、避免 rewrite 可能导致的循环跳转或路径拼接错误。301 是永久重定向,一旦被浏览器或 CDN 缓存,撤回困难;而 302 每次请求都重新判断,天然适配灰度的动态性。
不能全站跳,得靠请求特征区分目标人群。常用方式包括:
注意:if 尽量放在 location 块内;更健壮的做法是用 map 预定义变量,避免 if 在 server 级别的潜在副作用。
跳转时带上 $request_uri,能让 /api/user?id=123 精准变成 https://beta.example.com/api/user?id=123,不丢参数、不破链路。目标地址必须带完整协议(https://),否则可能因协议缺失导致跳转失败或降级为 HTTP。
光看页面跳了没不够,要确认底层行为是否合规: