如何解决Azure App Service部署槽重定向及服务异常问题?
排查Azure App Service生产槽重定向到测试槽的问题
这情况我之前碰到过好几次,大概率是部署槽的路由配置、域名绑定或者应用逻辑出了问题,结合你描述的“停测试槽生产也宕机、删测试槽生产404”的现象,咱们一步步来排查解决:
1. 先查自定义域名绑定(最常见原因)
- 赶紧去Azure门户,打开你的App Service,分别进入生产槽和测试槽的「自定义域名」页面:
- 生产槽应该绑定你的主业务域名(比如
yourdomain.com) - 测试槽应该用独立的子域名(比如
test.yourdomain.com)
- 生产槽应该绑定你的主业务域名(比如
- 如果发现主域名绑到了测试槽上,那生产槽自然会被流量忽略,直接把绑定调整过来就行。
2. 检查部署槽的流量路由规则
- 进入App Service的「部署槽」页面,选中测试槽后点击顶部的「流量路由」:
- 看看是不是误把100%的流量都导向了测试槽?或者设置了错误的路由规则(比如基于Cookie的路由)导致生产请求被转发。
- 临时修复可以先把生产槽的流量权重设为100%,测试槽设为0%,确保所有请求都走生产槽。
- 另外如果之前做过槽交换但没完成,或者交换后没刷新配置,也可能出现这种资源混淆的情况,可以尝试重新交换一次(记得先备份配置)。
3. 排查应用内的硬编码重定向
- 虽然你说Kudu里的环境变量和连接字符串是对的,但还是要确认.NET Core应用里有没有硬编码的重定向逻辑:
- 打开Kudu调试控制台(
https://<你的应用名>.scm.azurewebsites.net/DebugConsole),查看Startup.cs/Program.cs或者appsettings.Production.json,有没有写死跳转到测试槽域名的代码。 - 比如有没有类似
app.UseHttpsRedirection(options => { options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect; options.Host = new HostString("test.yourdomain.com"); });的错误配置。
- 打开Kudu调试控制台(
4. 检查默认域名的映射问题
- 如果用的是Azure自带的
.azurewebsites.net域名,确认生产槽的默认域名是yourapp.azurewebsites.net,测试槽是yourapp-test.azurewebsites.net:- 如果访问生产域名跳转到测试域名,可能是Azure内部的域名映射出了问题,这种情况可以尝试重启生产槽,或者清除App Service的缓存(在Kudu的「Tools」->「Clear Cache」)。
5. 解释“停测试槽生产宕机”的现象
- 同一App Service的部署槽本来就共享同一个应用服务计划,但停止一个槽不应该影响另一个。出现这种情况,大概率是你的生产槽代码依赖了测试槽的资源:
- 比如生产槽的API在调用测试槽的接口,或者共用了某个只有测试槽才启动的服务?仔细检查应用的业务逻辑,有没有跨槽的资源调用。
紧急恢复生产的步骤
如果现在需要快速恢复:
- 把测试槽的流量权重设为0%,确保所有请求都流向生产槽
- 重启生产槽,清除应用缓存
- 确认生产槽的域名绑定完全正确,没有指向测试槽的记录
内容的提问来源于stack exchange,提问作者WhoKnows
相关产品推荐
相关产品推荐

