![](/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.