如何在Apache上部署.NET Core Blazor站点且不影响静态站点
解决方案:基于子路径的反向代理配置
通过给.NET Core站点分配独立子路径(如/blazor),让Apache在默认80端口的虚拟主机中仅代理该子路径的请求到Kestrel,其余请求仍由静态站点处理,完美实现共存。
步骤1:配置Kestrel的基路径
让.NET Core应用知道自己运行在子路径下,两种方式二选一:
方式A:修改systemd服务配置
编辑Kestrel服务文件(通常是/etc/systemd/system/dotnet-mycoreapp.service),修改ExecStart行,添加--path-base=/blazor参数:
ExecStart=/var/www/websitefolder/app.Server --urls=http://localhost:5001/ --path-base=/blazor
方式B:通过配置文件设置
在/var/www/websitefolder/appsettings.json中添加基路径配置:
{ "ASPNETCORE_PATH_BASE": "/blazor" }
步骤2:修改Apache默认80端口虚拟主机
在现有静态站点的<VirtualHost *:80>配置中,添加针对子路径的反向代理规则,无需保留8080端口的虚拟主机:
<VirtualHost *:80> ServerName www.example.com # 静态站点原有配置,保留不动 DocumentRoot "/var/www/static-site-folder" <Directory "/var/www/static-site-folder"> AllowOverride All Require all granted </Directory> # 仅代理/blazor路径下的请求到Kestrel <Location /blazor> ProxyPreserveHost On ProxyPass http://localhost:5001/blazor ProxyPassReverse http://localhost:5001/blazor RequestHeader set Connection "keep-alive" </Location> # 配置Blazor的404路由规则 <Directory "/var/www/websitefolder/wwwroot"> ErrorDocument 404 /blazor/wwwroot/index.html </Directory> </VirtualHost>
步骤3:调整Blazor应用的路由配置
确保Blazor WASM适配子路径:
- 打开
wwwroot/index.html,修改<base href>标签:
<base href="/blazor/" />
- (可选)在
Program.cs中添加路由适配:
builder.Services.AddRouting(options => options.ApplyRelativePath("/blazor"));
步骤4:重启服务生效
# 重新加载systemd配置并重启Kestrel systemctl daemon-reload systemctl restart dotnet-mycoreapp # 重启Apache systemctl restart apache2
关键注意点
ProxyPass/ProxyPassReverse的路径必须和Kestrel的path-base完全一致,否则会出现路由错误- 静态站点的原有配置完全保留,不会被反向代理规则干扰
- Blazor的
<base href>必须设置正确,否则资源加载和页面路由会失效
内容的提问来源于stack exchange,提问作者Andi Hincu
相关产品推荐
相关产品推荐

