告别 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

相关推荐
蜗牛攻城狮1 小时前
【Vue3实战】El-Table实现“超过3行省略,悬停显示全文”的完美方案(附性能优化)
前端·vue.js·性能优化·element-plus
隔壁小邓2 小时前
vue的组件化的理解之单独拆分的组件&组件的封装
前端·javascript·vue.js
深念Y2 小时前
Nginx和Spring Cloud Gateway
运维·服务器·网络·网关·nginx·spring cloud·微服务
困惑阿三2 小时前
全栈部署排雷手册:从 405 报错到飞书推送成功
服务器·前端·后端·nginx·阿里云·node.js·飞书
optimistic_chen2 小时前
【Vue3入门】vue-router 路由管理
前端·javascript·vue.js·路由·router
捕捉一只前端小白2 小时前
cpolar内网穿透以及微信小程序域名设置
前端·vue.js·微信小程序·小程序
wuhen_n2 小时前
ESLint + Prettier + Husky + lint-staged:建立自动化的高效前端工作流
前端·javascript·vue.js
xiangpanf2 小时前
PHP与Vue:前后端技术深度对比
开发语言·vue.js·php
wuhen_n4 小时前
网络请求在Vite层的代理与Mock:告别跨域和后端依赖
前端·javascript·vue.js