[英]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.razor –
About
组件。当使用浏览器的地址栏请求应用程序的默认文档时(例如,
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 服务器场,然后它会自动创建路由规则。 通过健康检查来监控后端服务器会很方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.