繁体   English   中英

Blazor 服务器端在反向代理 404 后面

[英]Blazor server side behind reverse proxy 404

我有一个 blazor 服务器端应用程序托管在反向代理后面的 IIS 上(使用 ARR)。

我已经尝试了我能想到的一切,但我一直在 404

_framework/blazor.server.js

我的基本 href 设置为“/subsite/”:

<base href="/subsite/" />

我所有的 src 值都是相对的,如下所示:

<script src="_framework/blazor.server.js"></script>
<script src="_content/BlazorInputFile/inputfile.js"></script>
<script src="animations.js"></script>

每个其他脚本引用都可以正常加载,即使是 _content 数据,但不是 blazor.server.js。

我也尝试了 MVC 应用程序的旧 PathBase 技巧,但没有成功:

if (!env.IsDevelopment()) {
    app.Use((context, next) => {
        context.Request.PathBase = new PathString("/subsite");
        return next();
    });
}

谁能告诉我如何让 Blazor 意识到在反向代理场景中将 blazor.server.js 放在哪里?

您是否尝试过 UsePathBase?

app.UsePathBase("/subsite");

这是我的测试结果

测试结果

请查看本文了解更多https://www.billbogaiv.com/posts/net-core-hosted-on-subdirectories-in-nginx

来自文档

重写 URL 以获得正确的路由

Blazor WebAssembly 应用程序中页面组件的路由请求不像 Blazor 服务器托管应用程序中的路由请求那样简单。 考虑一个包含两个组件的 Blazor WebAssembly 应用程序:

  • Main.razor - 在应用程序的根目录加载并包含指向About组件 ( href="About" ) 的链接。
  • About.razorAbout组件。

当使用浏览器的地址栏请求应用程序的默认文档时(例如, https://www.contoso.com/ ):

  • 浏览器发出请求。
  • 返回默认页面,通常为index.html
  • index.html引导应用程序。
  • Blazor 的路由器加载,并呈现 Razor Main组件。

在主页中,选择 About 组件的链接在客户端上有效,因为 Blazor 路由器阻止浏览器在 Internet 上向www.contoso.com发出关于About的请求,并为呈现的About组件本身提供服务。 Blazor WebAssembly 应用程序中对内部端点的所有请求都以相同的方式工作:请求不会触发对 Internet 上服务器托管资源的基于浏览器的请求。 路由器在内部处理请求。

如果使用www.contoso.com/About的浏览器地址栏发出请求,则请求将失败。 应用程序的 Internet 主机上不存在此类资源,因此返回404 - Not Found响应。

由于浏览器向基于 Internet 的主机发出请求以获取客户端页面,因此 web 服务器和托管服务必须将对不在服务器上的资源的所有请求重写为index.html页面。 index.html返回时,应用程序的 Blazor 路由器接管并以正确的资源响应。

部署到 IIS 服务器时,您可以将 URL 重写模块与应用程序发布的web.config文件一起使用。 有关详细信息,请参阅IIS部分。


也许您可以尝试在 IIS manager->server node->application request routing cache->proxy->enable 中启用正向代理。

如果您只有一个网站,您可以将网站添加到 ARR 服务器场,然后它会自动创建路由规则。 通过健康检查来监控后端服务器会很方便。

这个 ARR 警告会导致我的 404 吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM