Nginx通过路由配置多个Blazor Server项目

多数情况下,单个域名挂载多个项目,这是正常的项目部署方案,
但随着业务的复杂度增大,会把项目进行拆分,通过路由进行业务区分,
此时就需要多个项目共享一个域名。

此篇文章则介绍 多个blazor server项目如何配置


假设你的前缀为 app1,此处只配置一个程序,其他程序同理

Nginx 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80;
server_name youdomain.com;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;

location /app1/ {
proxy_pass http://127.0.0.1:6011;
# 将所有应用程序路径添加到代理路径前缀中
rewrite ^/app1/(.*)$ /$1 break;
}

location /app2/ {
proxy_pass http://127.0.0.1:6012;
# 将所有应用程序路径添加到代理路径前缀中
rewrite ^/app2/(.*)$ /$1 break;
}
}

blazor server 项目配置

_Host.cshtml文件修改

1
2
3
4
5
6
7
8
9
10
@if (_env.IsProduction())
{
<base href="~/app1/" />
<link rel="icon" href="favicon.ico" />
}
else
{
<base href="~/" />
<link rel="icon" href="/favicon.ico" />
}

由于本地环境不需要加前缀,故作此判断,其他路径不需要改变

Program.cs 文件修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapBlazorHub();

if (app.Environment.IsProduction())
{
endpoints.MapFallbackToPage("/app1/{*path:nonfile}", "/_Host");
}
else
{
app.MapFallbackToPage("/_Host");
}
});

正常情况下,到此就配置完成了,但我的项目里用到了控制器,故需将所有请求的路由加上前缀,控制器路由无需添加