YARP是微软维护的基于.net的高性能反向代理库,可集成到ASP.NET Core应用中,支持路由、重写、负载均衡和健康检查。相比nginx等通用代理,YARP优势在于深度融入.NET生态,适合需要定制化代理逻辑的场景,如微服务网关、API聚合、灰度发布和本地开发代理。通过简单配置即可实现请求转发,例如将/api/路径请求转至https://httpbin.org;还可扩展自定义处理,如添加请求头、启用负载均衡(LeastRequests模式)和健康检查(每10秒探测/health路径)。YARP提供代码优先的灵活模型,适用于从基础路由到复杂流量控制的多样化需求。

YARP(Yet Another Reverse proxy)是一个基于 .NET 开发的高性能、可扩展的反向代理库,由微软团队维护。它不是传统意义上的完整独立代理服务,而是一个可以集成到 ASP.NET Core 应用中的库,允许你快速构建自定义的反向代理服务。通过 YARP,你可以将传入的 HTTP 请求转发到后端服务,并在转发过程中进行路由、重写、负载均衡、健康检查等操作。
为什么选择 YARP?
相比 Nginx 或 Traefik 等通用反向代理工具,YARP 的优势在于深度集成于 .NET 生态。如果你的应用已经运行在 .NET 平台上,需要定制化的代理逻辑(如身份验证、请求修改、日志记录等),YARP 提供了更灵活的编程模型。
常见使用场景包括:
快速开始:搭建一个基础代理服务
创建一个最简单的 YARP 代理服务只需几个步骤:
- 创建 ASP.NET Core 项目:
使用命令行创建新项目:
dotnet new web -n MyProxy
cd MyProxy - 安装 YARP 包:
dotnet add package Yarp.ReverseProxy - 配置代理路由:
在 Program.cs 中添加代理配置:
var builder = Webapplication.CreateBuilder(args); // 添加 YARP 服务 builder.Services.AddReverseProxy() .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); var app = builder.Build(); app.MapReverseProxy(); app.Run();
然后在 appsettings.json 中定义路由和集群:
{ "ReverseProxy": { "Routes": { "route1": { "ClusterId": "cluster1", "Match": { "Path": "/api/{**catch-all}" } } }, "Clusters": { "cluster1": { "Destinations": { "destination1": { "Address": "https://httpbin.org" } } } } } }
这个配置会把所有以 /api/ 开头的请求转发到 https://httpbin.org。启动应用后访问 http://localhost:5000/api/get,你会看到来自 httpbin 的响应。
进阶功能:自定义请求处理
YARP 支持在转发前后插入自定义逻辑。例如,你可以在请求头中添加认证信息:
builder.Services.AddReverseProxy() .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")) .AddTransforms(builderContext => { builderContext.AddRequestTransform(async transformContext => { transformContext.ProxyRequest.Headers["X-Api-Key"] = "your-key"; }); });
也可以启用负载均衡和健康检查:
"Clusters": { "cluster1": { "LoadBalancingMode": "LeastRequests", "HealthCheck": { "Active": { "Enabled": true, "Interval": "00:00:10", "Path": "/health" } }, "Destinations": { "destination1": { "Address": "https://service1.example.com" }, "destination2": { "Address": "https://service2.example.com" } } } }
总结
YARP 是一个轻量且强大的反向代理解决方案,特别适合 .NET 技术栈下的服务网关场景。它不取代 Nginx,而是提供一种代码优先的代理方式,便于实现复杂业务逻辑。从简单路由到高级流量控制,YARP 都能胜任。基本上就这些,不复杂但容易忽略细节。