![](/img/trans.png)
[英]Single Page Application Azure gateway path-based routing to Function App
[英]How to path-based reverse proxy app service behind application gateway?
我有一个配置了我的通配符证书的应用程序网关,我想用它来代理 myapp.mywebsite.net/mypath 后面的 myapp.azurewebsites.net(一个 ASP.NET 核心应用程序)。
我有一个在网关中配置的 myapp.mywebsite.net 上运行的现有站点,但我只希望/mypath
路由指向应用程序服务。 我怎样才能做到这一点?
myapp.azurewebsites.net
添加新的后端目标myapp.azurewebsites.net
启用具有特定域名的主机名覆盖。 不要添加路径覆盖,我们希望将/mypath
传递给应用服务。/mypath/*
mypathname
// 可以是任何值这会将myapp.mywebsite.net/mypath
指向该站点
请参阅此处了解更多信息。
将以下内容添加到 Configure 方法的开头。 我们希望在所有其他中间件发生之前调整标头。
app.UseForwardedHeaders(); // Enable hostname to be derived from headers added by app gateway
app.UsePathBase("/mypath"); // Tell ASP.NET that we have a base path
有关调试帮助,请参见此处。
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.AllowedHosts.Add("myapp.mywebsite.net");
options.KnownProxies.Add(IPAddress.Parse("10.my.gateway.ip"));
});
如果您正在使用
services.AddMicrosoftIdentityWebAppAuthentication(config);
对于身份验证,我们需要覆盖回复 url 使其指向myapp.mywebsite.net/mypath/signin-oidc
而不是myapp.azurewebsites.net/signin-oidc
。 这可以通过以下方式完成:
if (!env.IsDevelopment())
{
services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
// options.SaveTokens = true; // this saves the token for the downstream api
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = async ctxt =>
{
ctxt.ProtocolMessage.RedirectUri = "https://myapp.mywebsite.net/mypath/signin-oidc";
await Task.Yield();
}
};
});
}
我们只在 dev 中运行它,以便在本地运行我们的东西会执行使用 localhost 填充回复 URL 的默认行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.