在日常开发和部署中,我们经常需要在单台服务器上托管多个前端项目(如 Vue),并通过不同二级域名访问,同时还可能需要代理转发后端 API。传统方案依赖 Nginx 配置,不仅学习成本高,修改配置后还需重启服务。
今天给大家分享一款基于ASP.NET Core 开发的轻量级服务 ------Pascal.Edge.WebServiceAgent,完美替代 Nginx 实现多站点托管、域名动态匹配、配置热加载,让单主机多二级域名映射变得无比简单!
一、核心优势
相比 Nginx,这款工具的核心亮点在于:
- 开箱即用:基于.NET 生态,开发者无需学习 Nginx 复杂的配置语法
- 多站点托管:单服务支持 10 + 个 Vue / 静态文件站点同时运行
- 智能路由:基于 Host 头自动匹配域名,端口 + 域名双重兜底策略
- 配置热加载:修改配置文件无需重启服务,自动生效
- SPA 友好:内置 Vue Router History 模式路由回退,无需额外配置
- 双模式支持:静态文件托管 + HTTP 代理转发,一站式解决前后端部署
二、核心功能详解
1. 多站点托管
每个站点可独立配置端口、域名、静态文件目录,示例配置:
json
{
"Sites": [
{
"Name": "home",
"Port": 8050,
"Hostnames": ["welcome.pascaledge.cn"],
"Path": "./www-dist/home" // Vue打包后的dist目录
},
{
"Name": "game",
"Port": 8051,
"Hostnames": ["game.pascaledge.cn"],
"Path": "./www-dist/game"
}
]
}
2. 代理转发(替代 Nginx 反向代理)
无需配置 Nginx,直接将 API 请求转发到后端服务:
json
{
"Sites": [
{
"Name": "api",
"Port": 8053,
"Hostnames": ["api.pascaledge.cn"],
"ForwardUrl": "http://www.pascaledge.cn:5000" // 后端服务地址
}
]
}
3. 智能路由匹配规则
请求处理优先级清晰,无需担心域名 / 端口冲突:
- 域名优先:根据请求 Host 头精确匹配配置的域名列表
- 端口兜底:域名不匹配时,自动按请求端口匹配对应站点
- 默认站点:域名 / 端口都不匹配时,回退到默认站点
4. SPA 路由回退
自动支持 Vue Router 的 history 模式,无需像 Nginx 那样手动配置try_files,只需开启EnableSPAFallback: true即可。
三、快速部署步骤
步骤 1:环境准备
- 安装.NET 10.0 SDK/Runtime
- 准备好 Vue 打包后的 dist 目录(或其他静态文件)
步骤 2:目录结构部署
plaintext
Pascal.Edge.WebServiceAgent/
├── appsettings.json // 核心配置文件
├── www-dist/ // 静态文件根目录
│ ├── home/ // 对应welcome.good.cn
│ ├── game/ // 对应game.good.cn
│ └── admin/ // 新增站点示例
将 Vue 项目的 dist 文件复制到对应目录:
bash
运行
# 示例:部署home站点
cp -r /path/to/vue-home/dist/* ./www-dist/home/
步骤 3:配置域名解析
修改本地 hosts(生产环境配置 DNS):
bash
运行
# Windows: C:\Windows\System32\drivers\etc\hosts
# Linux/Mac: /etc/hosts
127.0.0.1 welcome.pascaledge.cn
127.0.0.1 game.pascaledge.cn
127.0.0.1 api.pascaledge.cn
步骤 4:配置文件编写
完整的appsettings.json示例:
json
{
"DefaultDocument": "index.html",
"EnableSPAFallback": true,
"DefaultSite": "home",
"Sites": [
{
"Name": "home",
"Port": 8050,
"Hostnames": ["welcome.pascaledge.cn"],
"Path": "./www-dist/home"
},
{
"Name": "game",
"Port": 8051,
"Hostnames": ["game.pascaledge.cn"],
"Path": "./www-dist/game"
},
{
"Name": "api",
"Port": 8053,
"Hostnames": ["api.pascaledge.cn"],
"ForwardUrl": "http://www.pascaledge.cn:5000"
}
]
}
步骤 5:启动服务
bash
运行
dotnet run
启动后即可通过以下地址访问:
前端站点:http://welcome.pascaledge.cn:8050
游戏站点:http://game.pascaledge.cn:8051
API 代理:http://api.pascaledge.cn:8053(自动转发到后端)
四、扩展:添加新站点
1. 添加静态文件站点(如管理后台)
修改appsettings.json,新增站点配置:
json
{
"Sites": [
// 原有站点...
{
"Name": "admin",
"Port": 8054,
"Hostnames": ["admin.pascaledge.cn"],
"Path": "./www-dist/admin"
}
]
}
复制管理后台的 dist 文件到www-dist/admin,无需重启服务,配置自动生效!
2. 添加代理转发站点(如后端服务)
json
{
"Sites": [
// 原有站点...
{
"Name": "backend",
"Port": 8055,
"Hostnames": ["backend.pascaledge.cn"],
"ForwardUrl": "http://192.168.1.101:8080"
}
]
}
五、核心配置项说明
表格
| 配置项 | 类型 | 说明 |
|---|---|---|
DefaultDocument |
string | 默认首页文档,默认 index.html |
EnableSPAFallback |
bool | 是否启用 SPA 路由回退(Vue/React 必备) |
DefaultSite |
string | 域名 / 端口不匹配时的默认站点 |
Sites[].Name |
string | 站点唯一标识 |
Sites[].Port |
int | 监听端口 |
Sites[].Hostnames |
string[] | 绑定的二级域名列表 |
Sites[].Path |
string | 静态文件目录(与 ForwardUrl 二选一) |
Sites[].ForwardUrl |
string | 代理转发地址(与 Path 二选一) |
六、总结
这款ASP.NET Core 服务完美解决了 Nginx 配置复杂、重启麻烦、SPA 路由配置繁琐等问题,特别适合.NET 开发者、前端部署运维人员使用。单服务器上通过简单的 JSON 配置,就能实现多二级域名的 Vue 静态站点托管和后端 API 代理转发,配置热加载更是提升了运维效率。
如果你也在为多站点部署、域名映射、代理转发头疼,不妨试试这款工具,告别 Nginx 的复杂配置,用更简单的方式搞定部署!
源代码托管:GitHub - PascalMing/Pascal.Edge.WebServiceAgent: Pascal.Edge.WebService Vue Agent · GitHub