You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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适配子路径:

  1. 打开wwwroot/index.html,修改<base href>标签:
<base href="/blazor/" />
  1. (可选)在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:24:40