Cur*_*ire 5 reverse-proxy asp.net-core
我在代理ASP.NET Core MVC应用程序时遇到问题.
我的应用程序在Kestrel上运行localhost:5000,我的Apache 2.4反向代理正在运行localhost:80.我要代理的所有请求localhost:80/test到localhost:5000
这是httpd.conf代理的部分:
...
<Location "/test">
ProxyPass "http://localhost:5000"
ProxyPassReverse "http://localhost:5000"
</Location>
...
Run Code Online (Sandbox Code Playgroud)
代理工作,但所有链接都被破坏.就像我有一个锚链接到一个以HomeController动作命名的控制器About,从代理返回的链接localhost/Home/About代替localhost/test/Home/About.主机是正确的,它test是缺少的上下文根.
处理这个问题的最佳做法是什么?ASP.NET Core中的配置是否指定了上下文根,以便TagHelpers将其考虑在内?或者它是Apache ProxyPass中重写链接的配置(真的不是这个的忠实粉丝)?
pok*_*oke 15
问题是Web应用程序不知道子路径/test,因此在您的情况下,它只会响应,就好像它是在根路径上直接调用一样.
ASP.NET Core有一个概念PathBase来解决这个问题.在PathBase本质上是将被认为是路径的固定部分的请求的URI路径的一部分.每当框架内的组件生成URL时,它都会考虑当前的流量PathBase,并确保将其作为所有生成路径的前缀.
默认情况下,PathBase它将为空,这取决于您的反向代理的配置,以说明您应该如何设置PathBase.
内置的UsePathBaseMiddleware可用于临时配置PathBase传入请求.该中间件的工作方式基本上,它会检查该请求是否与所接受的路径前缀开头,如果确实如此,则该前缀会从被移动Path到PathBase.
您可以使用UsePathBaseExtensions.UsePathBase扩展方法激活它.只需Configure使用您要使用的基本路径调用该方法作为Startup方法中的第一个方法:
public void Configure(IApplicationBuilder app)
{
app.UsePathBase("/test");
// all the other middlewares
app.UseStaticFiles();
app.UseMvc();
// …
}
Run Code Online (Sandbox Code Playgroud)
由于中间件只会调整PathBase它/test在传入请求路径中看到前缀的时间,因此您需要确保反向代理实际上包含该前缀.因此,您必须调整Apache配置以包含该路径:
<Location "/test">
ProxyPass "http://localhost:5000/test"
ProxyPassReverse "http://localhost:5000/test"
</Location>
Run Code Online (Sandbox Code Playgroud)
请注意,UsePathBaseMiddleware不会阻止应用程序在没有该前缀的情况下工作.所以你可以在有和没有基本路径的情况下使用它,它将正确适应.
如果您不想调整反向代理配置以在转发的请求中包含路径,那么您将无法使用UsePathBaseMiddleware.相反,您必须在那里添加自己非常简单的中间件:
public void Configure(IApplicationBuilder app)
{
app.Use((context, next) =>
{
context.Request.PathBase = "/test";
return next();
});
// all the other middlewares
app.UseStaticFiles();
app.UseMvc();
// …
}
Run Code Online (Sandbox Code Playgroud)
这将设置为传入请求/test的常量 PathBase.因此,实际传入的请求不必包含它,这意味着您可以保留反向代理配置(而不是在/test那里转发路径).然而,这也意味着,不像用UsePathBaseMiddleware在PathBase被动态地设置取决于传入的请求,现在所有的应用程序请求将需要路径,不管他们是否经过反向代理与否.
| 归档时间: |
|
| 查看次数: |
3718 次 |
| 最近记录: |