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

Posted

技术标签:

【中文标题】反向代理 404 后面的 Blazor 服务器端【英文标题】:Blazor server side behind reverse proxy 404 【发布时间】:2020-02-19 09:33:20 【问题描述】:

我在反向代理后面的 IIS 上托管了一个 blazor 服务器端应用程序(使用 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 放在哪里?

【问题讨论】:

blazor.server.js 是一个嵌入式资源。您可以尝试获取文件的副本并像任何其他 js 文件一样静态地提供它。但即便如此,服务器和浏览器之间仍有很多信号-r 喋喋不休。不确定它在您的设置中如何工作。 嗯。我不太明白,因为组件也是嵌入式资源,生活在 _content 中,但它发现它们很好。我会尝试抓取它并静态提供它,但这似乎是一个实际的错误 - 我的意思是,你怎么能忘记在 2019 年支持反向代理子站点 您是否有任何日志记录可用于查看哪个(以及是否)请求路径以 ASP.NET 结尾? 【参考方案1】:

您尝试过 UsePathBase 吗?

app.UsePathBase("/subsite");

这是我的测试结果

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

【讨论】:

【参考方案2】:

来自docs。

重写 URL 以正确路由

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

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

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

浏览器发出请求。 返回默认页面,通常是index.htmlindex.html 引导应用程序。 Blazor 的路由器加载,Razor Main 组件被渲染。

在主页中,选择“关于”组件的链接在客户端上工作,因为 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管理器->服务器节点->应用请求路由缓存->代理->启用中启用转发代理。

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

Is this ARR warning causing my 404?

【讨论】:

好吧,据我所知 - 那篇文章围绕 Blazor WebAssembly 展开,我使用的是服务器端。此外,我的 IIS 已经在使用 ARR 的正向代理功能(因为这就是我在设置中进行反向代理的方式)。

以上是关于反向代理 404 后面的 Blazor 服务器端的主要内容,如果未能解决你的问题,请参考以下文章

nginx 反向代理 google,出现 404,怎么破

nginx反向代理后,只要刷新页面无法访问,404错误,解决方法

Nginx配置二级目录/路径 映射不同的反向代理和规避IP+端口访问

内网穿透的高性能的反向代理应用FRP-自定义404错误页实践可行版

ASP.NET Core 404 响应中的 Service Fabric 反向代理集成

Nginx 反向代理与负载均衡详解