将Azure网站基础URL重定向至自定义域名的技术求助
解决Azure Linux Web App会话过期重定向到azurewebsites域名的问题
1. 先配置ForwardedHeaders中间件(核心)
Azure Linux Web App本质是反向代理,它会把真实请求的主机、协议等信息放在X-Forwarded-Host、X-Forwarded-Proto这些请求头里,但.NET Core默认不会信任这些头,导致应用拿到的是内部的azurewebsites.net域名——这就是会话过期时跳错域名的根源。
在Program.cs里加这段配置,让应用识别真实的外部请求主机:
var builder = WebApplication.CreateBuilder(args); // 配置ForwardedHeaders,信任反向代理的请求头 builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost; // 生产环境建议指定Azure的代理IP段,这里先清空默认限制简化配置 options.KnownProxies.Clear(); options.KnownNetworks.Clear(); options.ForwardLimit = null; }); // 你的其他服务配置(比如AddControllers、AddAuthentication之类的) // ... var app = builder.Build(); // 注意:这个中间件必须放在所有其他中间件之前 app.UseForwardedHeaders(); // 后续的中间件配置(UseRouting、UseAuthentication等) // ...
2. 修正重定向中间件,避免循环+保留原路径
如果还有个别场景跳转到azure域名,就加这段修正后的中间件。它只会在请求直接访问azurewebsites域名时重定向,还会保留原请求的路径和参数,同时避免重定向循环:
app.Use(async (context, next) => { var hostName = context.Request.Host.Host; // 只处理直接访问azurewebsites的请求,避免反向代理场景下的循环 if (hostName.Contains("azurewebsites.net") && !context.Request.Headers.ContainsKey("X-Forwarded-Host")) { var redirectUrl = $"https://你的自定义域名{context.Request.Path}{context.Request.QueryString}"; context.Response.Redirect(redirectUrl, permanent: true); return; } await next(); });
记得把你的自定义域名换成你实际用的域名,比如example.com。
3. 检查身份验证配置(如果用了Cookie认证)
如果你的应用用了ASP.NET Core的Cookie认证,别在配置里硬编码azurewebsites.net的地址,还可以强制登录重定向用自定义域名:
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { // 登录路径用相对路径,别写绝对URL options.LoginPath = "/Account/Login"; // 如果有子域名需求,设置Cookie.Domain为根域名,比如".example.com" // options.Cookie.Domain = ".example.com"; // 强制重定向到登录页时用自定义域名 options.Events = new CookieAuthenticationEvents { OnRedirectToLogin = context => { context.RedirectUri = $"https://你的自定义域名{context.RedirectUri}"; return Task.CompletedTask; } }; });
验证方法
部署修改后的代码,等会话过期触发登录重定向,看看跳转的URL是不是你的自定义域名就好了。
内容的提问来源于stack exchange,提问作者moyomeh
相关产品推荐
相关产品推荐

