# Aneiang.Yarp
**Repository Path**: aneiangsoft/aneiang-yarp
## Basic Information
- **Project Name**: Aneiang.Yarp
- **Description**: 基于 YARP 的生产级全功能 API 网关
Dashboard 可视化管理 · WAF 防火墙 · 通知告警 · 动态路由 · 自动注册 · IP 隔离 · 熔断限流 · 健康检查 · 配置回滚
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://yarp.aneiang.com
- **GVP Project**: No
## Statistics
- **Stars**: 18
- **Forks**: 10
- **Created**: 2026-04-27
- **Last Updated**: 2026-07-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: yarp, 网关, Gateway, 微服务, 运维监控
## README

**Aneiang.Yarp — 基于 YARP 的全功能 API 网关**
Dashboard · 动态路由 · WAF 防火墙 · AI 助手 · 2FA 验证 · 通知告警 · IP 隔离 · 自动注册
[](https://www.nuget.org/packages/Aneiang.Yarp)
[](https://www.nuget.org/packages/Aneiang.Yarp.Dashboard)
[](https://www.nuget.org/packages/Aneiang.Yarp.Client)
[](https://github.com/microsoft/reverse-proxy)
[](https://dotnet.microsoft.com/)
[](LICENSE)
[English](README.md) | [中文](README.zh-CN.md)
---
**Aneiang.Yarp** 是基于 [微软 YARP](https://microsoft.github.io/reverse-proxy/) 2.3.0 构建的生产级 API 网关增强方案。它在 YARP 基础上补齐了所有生产环境所需的配套设施:可视化管理面板、WAF 防火墙、AI 智能助手、通知告警、健康监控、熔断器面板、客户端自动注册、IP 隔离负载均衡 — 全部通过三个 NuGet 包交付。
> **文档地址**:https://yarp.aneiang.com
>
> **在线演示**:https://yarp-test.aneiang.com/aneiang · `admin` / `demo123`
>
>**在线代理地址(站点和代理端口隔离了)**:https://yarp-proxy.aneiang.com
---
## 目录
- [快速开始](#快速开始)
- [包结构与技术栈](#包结构与技术栈)
- [Dashboard](#dashboard)
- [核心功能](#核心功能)
- [动态路由](#动态路由)
- [WAF 防火墙](#waf-防火墙)
- [通知告警](#通知告警)
- [健康检查监控](#健康检查监控)
- [熔断器面板](#熔断器面板)
- [网关策略引擎](#网关策略引擎)
- [中间件管道与插件系统](#中间件管道与插件系统)
- [客户端自动注册](#客户端自动注册)
- [IP 隔离负载均衡](#ip-隔离负载均衡)
- [请求日志](#请求日志)
- [AI 智能助手](#ai-智能助手)
- [认证](#认证)
- [两步验证(2FA)](#两步验证2fa)
- [配置管理](#配置管理)
- [企业化 UI](#企业化-ui)
- [配置参考](#配置参考)
- [高级用法](#高级用法)
- [示例项目](#示例项目)
- [NuGet](#nuget)
- [许可证](#许可证)
---
## 快速开始
### 1. 创建网关
```bash
dotnet new web -n MyGateway
cd MyGateway
dotnet add package Aneiang.Yarp
dotnet add package Aneiang.Yarp.Dashboard
```
```csharp
// Program.cs
using Aneiang.Yarp.Extensions;
using Aneiang.Yarp.Dashboard.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAneiangYarp();
builder.Services.AddAneiangYarpDashboard();
var app = builder.Build();
app.UseRouting();
app.UseAneiangYarpDashboard(); // 内部已包含 MapReverseProxy
app.MapControllers();
app.Run();
```
Dashboard 地址:`/apigateway`。
### 2. 创建微服务
```bash
dotnet new web -n MyService
cd MyService
dotnet add package Aneiang.Yarp.Client
```
```csharp
// Program.cs
using Aneiang.Yarp.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAneiangYarpClient(); // ← 启动时自动注册
builder.Services.AddControllers();
var app = builder.Build();
app.UseRouting();
app.MapControllers();
app.Run();
```
```json
// appsettings.json
{
"Gateway": {
"Registration": {
"GatewayUrl": "http://localhost:5000"
}
}
}
```
微服务启动时自动注册到网关,关闭时自动注销。无需额外代码。
---
## 包结构与技术栈
### 包结构
| 包 | 用途 | 依赖 YARP |
|:----|:------|:---:|
| **Aneiang.Yarp** | 网关核心:动态路由引擎(`IDynamicYarpConfigService`)、配置持久化、API 鉴权体系、IP 隔离负载均衡(`IpBasedLoadBalancingPolicy`)、存储层抽象、配置变更事件模型、gRPC 注册协议 | ✅ |
| **Aneiang.Yarp.Dashboard** | Web 管理面板:全量 CRUD、WAF 防火墙、AI 智能助手(Function Calling)、2FA 两步验证、通知告警、健康检查监控、熔断器管理、代理日志、审计日志、配置快照与回滚、策略引擎、限流/重试中间件、SignalR 实时流量推送、SQLite 持久化 | 通过核心库 |
| **Aneiang.Yarp.Client** | 客户端 SDK:启动自动注册 + 关闭自动注销、Kestrel 自动配置,一行代码接入。零 YARP 依赖,仅需 `Microsoft.AspNetCore.App` | ❌ |
| **Aneiang.Yarp.Storage.Abstractions** | 存储抽象层:8 个独立仓储接口 + 实体模型 | ❌ |
| **Aneiang.Yarp.Storage.Sqlite** | SQLite 存储实现:支持 SQLCipher AES-256 加密,懒加载建表,共享连接池 | 通过抽象层 |
| **Aneiang.Yarp.Grpc** | gRPC 注册协议:`GatewayRegistry.proto` 定义服务契约,自动端口分配 | ❌ |
```
Aneiang.Yarp.Dashboard
└── Aneiang.Yarp
├── Aneiang.Yarp.Client
├── Aneiang.Yarp.Grpc
└── Aneiang.Yarp.Storage.Abstractions
└── Aneiang.Yarp.Storage.Sqlite
客户端微服务 → 仅引用 Aneiang.Yarp.Client(不引入 YARP SDK)
网关项目 → 引用 Aneiang.Yarp + Aneiang.Yarp.Dashboard
```
### 技术栈
| 层级 | 技术 | 说明 |
|:-----|:-----|:-----|
| 反向代理引擎 | Microsoft YARP 2.3.0 | 高性能 HTTP 反向代理 |
| 运行时 | .NET 8.0 / 9.0 | 跨平台 |
| 存储 | SQLite(支持 SQLCipher AES-256 加密) | 嵌入式,零外部服务依赖 |
| 通信 | REST API + gRPC + SignalR | HTTP 管理、gRPC 注册、WebSocket 实时推送 |
| 认证 | JWT (HMAC-SHA256) + API Key | 内置登录页面,五种模式可切换 |
| Dashboard 技术 | Razor Pages + 原生 JavaScript | 无 Node.js 依赖,响应式布局 |
| AI 能力 | OpenAI 兼容协议(SSE 流式) | 支持 OpenAI / DeepSeek / 千问 / 自定义服务商 |
---
## Dashboard
两行代码启用完整的管理面板:
```csharp
builder.Services.AddAneiangYarpDashboard();
// ...
app.UseAneiangYarpDashboard();
```
### 全部 15 个管理页面
| 分组 | 页面 | 详细功能 |
|:------|:-----|:-----|
| **概览** | 项目概览 | 活跃路由/集群计数、流量 QPS 概览、集群健康状态快速预览、最近变更时间线 |
| **网关** | 集群管理 | 创建/编辑/删除集群(含多目标节点),配置主动/被动健康检查参数,`HttpRequest` 与 `HttpClient` 配置 |
| | 路由管理 | 管理路由规则(含 Transform 转换器、Metadata 元数据、`Waf:Enabled` 按路由开关),拖拽排序优先级,`CorsPolicy` 跨域配置 |
| **监控** | 统计面板 | 请求量趋势、P50/P90/P99 延迟分位数、HTTP 状态码分布饼图、Top 路由排行 |
| | 请求日志 | 实时日志流(WebSocket 推送)+ 历史日志(按 TraceID 配对请求/响应合并展示),按路由/状态码/TraceID 组合过滤,敏感信息脱敏,采样与仅记录错误模式 |
| | 熔断器 | 每集群/节点实时熔断状态:Closed(绿色)/Open(红色)/HalfOpen(黄色),连续失败次数 vs 阈值、恢复倒计时、一键重置 |
| | 通知中心 | 管理 Webhook 渠道(钉钉机器人/通用 HTTP),配置事件规则(按事件类型独立开关+冷却时间),查看通知发送历史 |
| | 健康检查 | 集群级健康概览表格,按目标节点钻取展示实时健康状态、最近检查时间与结果 |
| **安全** | WAF 防火墙 | IP 黑白名单编辑(精确 IP/CIDR 网段/通配符),SQL 注入、XSS、路径遍历检测开关,请求大小限制,安全响应头配置 |
| | 策略管理 | 流量策略创建/编辑/启用/禁用/排序,支持重试、超时、限流、请求转换等类型 |
| | 插件管理 | 查看所有已注册的 `IGatewayPlugin` 插件,查看插件元数据与加载顺序 |
| **系统** | 配置历史 | 每次变更前自动版本快照列表,可查看任意快照完整内容,一键回滚到指定历史版本 |
| | 审计日志 | 完整操作审计轨迹:操作类型、操作对象、操作人、变更前后 JSON Diff、精确时间戳 |
| | 运行模式 | 展示当前部署模式(AllInOne/Split/ProxyOnly/DashboardOnly)、监听端点详情(名称/地址/端口/角色/公网状态)、健康检查端点状态及安全告警 |
| | 系统设置 | 认证模式切换、JWT 密钥配置、AI 配置、日志配置(采样率/脱敏列表/Body 长度限制)、一键下载 SQLite 数据库、语言切换 |
---
## 核心功能
### 动态路由
YARP 原生通过 `appsettings.json` 或 `InMemoryConfigProvider` 管理路由,修改后需要手动更新内存状态。Aneiang.Yarp 在此基础上构建了完整的运行时路由管理体系:
**双层配置源合并机制**:
- **静态配置层**:`appsettings.json` 中 `ReverseProxy` 节点定义的基础路由,适合网关自身依赖的路由
- **动态配置层**:通过 Dashboard UI 或 REST API 注册的路由,存储在 `DynamicYarpConfigService` 中
- **合并策略**:启动时 `BuildMergedConfig()` 将静态与动态配置合并去重,注入 YARP 的 `InMemoryConfigProvider`,YARP 原生热更新机制确保实时生效
**自动持久化与恢复**:
- 所有动态路由/集群变更即时写入 `gateway-dynamic.json`(应用根目录)
- 网关重启时自动从该文件恢复全部动态配置,无需人工干预
**元数据追踪**:每个动态路由和集群自动记录 `CreatedAt`、`CreatedBy`(Dashboard / API / Client / Import)、`Source`
**线程安全保障**:所有字典读写通过 `SemaphoreSlim(1,1)` 保护,原生支持 async/await,不阻塞线程池线程
### WAF 防火墙
内建于网关中间件管道的生产级 Web 应用防火墙,`WafMiddleware` 在请求到达反向代理之前执行安全检查,零外部服务依赖。所有检测规则关闭时,中间件直接透传,零性能损耗。
| 防护能力 | 实现细节 |
|:-----------|:--------|
| **IP 黑白名单** | 精确 IP、CIDR 网段、通配符匹配。白名单优先,IP 匹配使用预编译正则缓存 |
| **SQL 注入检测** | 2 组预编译正则(关键字组 + 注入值组),每条含 5ms ReDoS 超时 |
| **XSS 检测** | 检测 `