反向代理是一种常见的网络技术,可以实现多种功能,例如负载均衡、缓存、压缩、转码等。并且在互联网中扮演着重要的角色,可以提高网站的性能、可靠性和安全性。
但是,构建一个高性能、可靠和可定制的反向代理并不容易,市面上已有的反向代理产品,可能无法满足特定的需求,或者需要修改源代码或编写复杂的脚本,于是,微软推出了 YARP 项目。点个关注吧👇
什么是 YARP?
YARP 是一个反向代理工具包,用于使用 ASP.NET 和 .NET 的基础设施并在 .NET 中构建快速代理服务器。YARP 的全称是 Yet Another Reverse Proxy,意思是又一个反向代理。
YARP 是由微软内部的多个团队共同开发的,它的目标是为那些需要定制和调整反向代理行为的场景提供一个灵活和易用的解决方案。
YARP 希望成为一个统一和标准化的反向代理库,让开发者可以专注于自己的业务逻辑,而不用担心底层的 HTTP 协议细节。
项目地址:
https://microsoft.github.io/reverse-proxy/
YARP 的主要特点
YARP 的主要特点有以下几点:
高性能:YARP 使用了 .NET 的最新技术,例如 Span<T>、Memory<T>、ValueTask<T> 等,来减少内存分配和复制,提高吞吐量和响应时间。YARP 还支持 HTTP/2 和 HTTP/3 协议,以及 HTTP/2 的 gRPC 扩展。
可靠:YARP 提供了多种故障处理机制,来保证后端服务器的可用性和稳定性。YARP 还支持健康检查和负载均衡策略,来动态地调整后端服务器的权重和优先级。
可定制:YARP 的最大优势是它可以通过 .NET 代码来灵活地定制和扩展反向代理的行为。YARP 提供了多个扩展点,例如路由规则、转发管道、请求转换器、响应转换器等,让开发者可以根据自己的需求来修改或增加功能。YARP 还支持通过配置文件或 API 来动态地更新反向代理的设置。
如何使用 YARP?
使用 YARP 的最简单的方法是通过 Yarp.ReverseProxy 类库,以下是一个简单的示例,它创建了一个反向代理,将所有请求转发到 https://www.baidu.com/ 这个地址。
// 引入 Yarp.ReverseProxy 命名空间
using Yarp.ReverseProxy;
// 创建一个 ASP.NET Core Web 应用程序
var builder = WebApplication.CreateBuilder(args);
// 添加 Yarp.ReverseProxy 服务
builder.Services.AddReverseProxy()
// 从配置文件中加载反向代理设置
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
// 创建一个 Web 应用程序主机
var app = builder.Build();
// 使用 Yarp.ReverseProxy 中间件
app.UseReverseProxy();
// 启动 Web 应用程序主机
app.Run();
上面的代码需要配合一个配置文件来使用,例如 appsettings.json,它定义了反向代理的路由规则和后端服务器。以下是一个简单的配置文件示例:
"ReverseProxy": {
// 定义路由规则集合
"Routes": {
// 路由规则的唯一标识符
"route1": {
// 路由规则对应的后端服务器集合的标识符,这里引用了下面定义的 cluster1 集合
"ClusterId": "cluster1",
// 路由规则的匹配模式,这里使用了一个正则表达式,表示匹配任何路径
"Match": {
"Path": "{**catch-all}"
}
}
},
// 定义后端服务器集合
"Clusters": {
// 后端服务器集合的唯一标识符
"cluster1": {
// 指定后端目标服务器
"Destinations": {
"destination1": {
"Address": "https://www.baidu.com/"
}
}
}
}
}
预览一下效果:
YARP 不仅可以用来做基础请求代理,还可以实现多种反向代理的功能,例如:
负载均衡:YARP 可以根据不同的策略,如轮询、随机、最少连接、权重等,来在后端服务器之间分配请求的负载。
缓存和压缩:YARP 可以根据不同的参数,如缓存时间、缓存大小、压缩算法、压缩级别等,来对请求和响应的内容进行缓存和压缩,以提高性能和节省带宽。
身份验证和授权:YARP 可以根据不同的机制,如基本认证、摘要认证、OAuth2、JWT等,来对请求和响应的内容进行身份验证和授权,以保证安全和合法性。
速率限制:YARP 可用于在将请求代理到目标服务器之前对请求进行速率限制。这可以减少目标服务器上的负载,添加一层保护,并确保跨应用程序实施一致的策略。
健康检查:YARP 可以根据不同的策略,如检查间隔、超时、失败阈值、成功阈值等,来对后端服务器的健康状态进行检查和报告,以保证可用性和稳定性。
当然,这些都是 YARP 的基本功能,如果你想要更多的定制化和扩展性,你可以使用 YARP 提供的多个扩展点,来修改或增加你想要的反向代理行为。
YARP 关键配置
YARP 的配置是通过 JSON 格式的文件或者以编程方式提供配置来实现的。YARP 配置中有几个关键节点属性,分别是:
Routes:路由是反向代理的核心概念,它定义了如何将客户端的请求映射到后端服务器。路由包含了一个或多个匹配条件,例如请求路径、请求方法、请求头等,以及一个对应的后端服务器集合的标识符。路由还可以包含一些其他的设置,例如优先级、超时、重试等。
Clusters:集群是一组后端服务器的抽象,它定义了如何与后端服务器通信和交互。集群包含了一个或多个后端服务器地址,以及一些其他的设置,例如负载均衡策略、健康检查策略、会话亲和性策略等。
Destinations:目标是后端服务器的具体实例,它定义了后端服务器的地址和其他的元数据,例如权重、健康状态等。目标可以被一个或多个路由引用,也可以被一个或多个集群包含。
Transforms:转换是反向代理的高级特性,它定义了如何修改请求和响应的内容,例如添加、删除或替换请求头、请求参数、响应头、响应状态码等。转换可以应用于路由或集群的级别,也可以应用于目标的级别。
更多配置请查看文档:
https://microsoft.github.io/reverse-proxy/api/index.html
如果你对 YARP 有兴趣,不妨去体验一下。
👇感谢阅读,点赞+分享+收藏+关注👇
文章出自猿惑豁微信公众号