告别 Nginx!ASP.NET Core 实现多域名 Vue 静态服务与代理转发

在日常开发和部署中,我们经常需要在单台服务器上托管多个前端项目(如 Vue),并通过不同二级域名访问,同时还可能需要代理转发后端 API。传统方案依赖 Nginx 配置,不仅学习成本高,修改配置后还需重启服务。

今天给大家分享一款基于ASP.NET Core 开发的轻量级服务 ------Pascal.Edge.WebServiceAgent,完美替代 Nginx 实现多站点托管、域名动态匹配、配置热加载,让单主机多二级域名映射变得无比简单!

一、核心优势

相比 Nginx,这款工具的核心亮点在于:

  1. 开箱即用基于.NET 生态,开发者无需学习 Nginx 复杂的配置语法
  2. 多站点托管:单服务支持 10 + 个 Vue / 静态文件站点同时运行
  3. 智能路由:基于 Host 头自动匹配域名,端口 + 域名双重兜底策略
  4. 配置热加载:修改配置文件无需重启服务,自动生效
  5. SPA 友好:内置 Vue Router History 模式路由回退,无需额外配置
  6. 双模式支持:静态文件托管 + 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. 智能路由匹配规则

请求处理优先级清晰,无需担心域名 / 端口冲突:

  1. 域名优先:根据请求 Host 头精确匹配配置的域名列表
  2. 端口兜底:域名不匹配时,自动按请求端口匹配对应站点
  3. 默认站点:域名 / 端口都不匹配时,回退到默认站点

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

相关推荐
涵涵(互关)21 小时前
GoView各项目文件中的相关语法2
前端·javascript·vue.js
焰火19991 天前
[Vue]可重置的响应式状态reactive
前端·vue.js
源码宝1 天前
基于 SpringBoot + Vue 的医院随访系统:技术架构与功能实现
java·vue.js·spring boot·架构·源码·随访系统·随访管理
老王以为1 天前
为什么 React 和 Vue 不一样?
前端·vue.js·react.js
web打印社区1 天前
2026最新Web静默打印解决方案,无插件无预览,完美替代Lodop
前端·javascript·vue.js·electron·pdf
Forever7_1 天前
Vue 全局监控用户行为,最强方案!
vue.js
薯老板1 天前
vue组件之间的通信
前端·vue.js
计算机安禾1 天前
【Linux从入门到精通】第32篇:Nginx入门——高性能Web服务器搭建
linux·服务器·nginx
光影少年1 天前
前端SSR和ssg区别
前端·vue.js·人工智能·学习·react.js
吴声子夜歌1 天前
Vue3——UI组件库Element Plus(一)
vue.js·ui·elementplus