C# 中的 YARP 简介 - 如何创建反向代理
在 .NET Core 环境中有效管理网络流量时,反向代理成为不可或缺的工具。 YARP 是 Yet Another Reverse Proxy 的缩写,是微软专为 .NET 生态系统打造的高度灵活、高度可定制的反向代理项目。 在本文中,我们将按照 Tim Corey 的综合教程"Intro To YARP In C# - How To Create a Reverse Proxy"深入学习 YARP 的入门知识,他在该教程中演示了在 .NET Core Web 应用程序中设置和使用 YARP。
让我们从介绍 YARP 开始,看看您如何在自己的项目中利用这个代理框架。
什么是反向代理?
1:07 时,Tim 解释说,反向代理位于客户端(用户)和后端服务器之间,管理传入的请求并将请求有效地路由到适当的目的地。
蒂姆在 1:45 处概述了代理服务器的重要性:它不仅能平衡负载,还能简化请求头、确保 HTTPS 连接的安全性,并确保后端服务与直接访问隔离。 通过使用反向代理,您可以在不暴露内部结构的情况下轻松扩展您的 .NET Core 应用程序。
YARP 简介
5:11 时,Tim 介绍了 YARP - Yet Another Reverse Proxy。 Tim 解释说,微软意识到需要一个代理框架来更好地满足其广泛的 .NET 应用程序的特定需求,从而创建了 YARP。它被设计成一个库,以模块化、健壮和可扩展的方式提供核心代理功能。

该库正在积极开发中,以确保包含最新功能并支持 Linux、Windows 和云环境等最新技术。
此外,Tim 还强调了 YARP 的全面维护文档和大量可用文档,这让新开发人员更容易上手。
设置基本 YARP 项目
6:14 时,Tim 使用 net SDK 在 Visual Studio 中启动一个新项目。 他创建了一个名为 Pessimistic API 的基本 ASP.NET Core Web API 项目。

7:02 时的 Tim 修改了项目,创建了一个模拟寒冷天气服务的悲观 API。这个简单的 .NET Core 应用程序就是 YARP 稍后代理的后端服务器。
Tim 在 8:44 建议在继续前行之前对项目进行验证,确保示例服务能正确响应 /weatherforecast 请求。
创建 YARP 网关
在 9:04 时,Tim 创建了一个名为 YarpGateway 的空 ASP.NET Core 项目。 本项目充当反向代理。
Tim 通过进入 Manage NuGet Packages 并搜索 install package YARP 来安装必要的软件包(10:24)。 这就需要使用 YARP Reverse Proxy(提供所需的核心代理功能的官方库)。
配置 YARP.
12:02 时,Tim 演示了如何在 Program.cs 中使用以下方法连接 YARP 配置:
builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("YARP"));builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("YARP"));该设置可加载定义路由和集群的配置文件,这些文件是使用 YARP 路由请求时的基本要素。
路由与传入路径相匹配,集群定义要转发的后端服务。 这种模块化配置支持添加速率限制、替换模块和微调路径管理等高级功能。
Tim 指出,这种灵活的设计正是 YARP 成为高度可定制的反向代理,适合实际项目的原因。
测试基本代理设置
在 20:02 分,Tim 展示了同时运行后端 Pessimistic API 和 YarpGateway 的情况。
当您导航到网关的 URL /weatherforecast 时,YARP 会将传入的请求路由到后端服务器,获取响应并提供服务,而不会暴露内部 URL。 这展示了代理功能和路由请求的实际操作。
利用第二后台进行扩展
21:17 时,Tim 添加了另一个名为 Optimistic API 的新项目,该项目只返回温暖的温度。
他将 YARP 配置为单个集群中的多个目的地。 这可以实现负载均衡--在两个后端服务器之间随机分配接收到的请求。
随后,在 26:26 处,Tim 解释说您可以进一步自定义负载平衡策略,包括循环或基于请求属性的自定义逻辑等选项。
使用 YARP 升级静态网站
28:12 时,Tim 讲述了一个真实的例子:升级自己的网站 (iamtimcorey.com)。
他创建了一个 WebsiteUpgrade .NET Core 网络应用程序,使用 catch-all 路由将所有流量代理到原始网站。

这种策略允许增量更新:Tim 可以使用 Razor 对页面进行重建和现代化,同时仍然支持传统系统提供的旧内容。 收到的请求会根据路径自动转到原始网站或新内容。
使用 Razor 页面添加新功能
34:30 时,Tim 将 Razor Pages 添加到升级项目中。 他展示了如何添加一个简单的页面 (/more),由新的应用程序直接提供服务,而其他所有内容都是代理的。
由于 YARP 的灵活性,可以在不影响现有后台服务的情况下添加新的模块和功能。
实现高级路由和路径转换
在 39:03 处,Tim 建立了一个 /random 路由,它可以重写路径并在三个不同的课程页面中随机重定向用户。
他使用 YARP 的转换功能在代理过程中修改请求头和路径,展示了开发人员如何根据特定需求对行为进行微调。
Tim 在 44:03 左右遇到一个错别字,但他纠正了错误,并强调要仔细关注配置文件。
设置循环负载平衡
45:10 时,Tim 将随机路由切换为循环路由。 这一简单的配置更改提高了在多个页面之间分配流量的可预测性。

它突出了 YARP 的主要特点之一:仅通过配置即可轻松动态地定制行为,无需深入修改代码。
结论:为什么选择 YARP?
47:03 时,Tim 总结了 YARP 为何是现代 .NET Core 应用程序的关键工具:
它被设计成一个库,便于集成。
它提供了开发人员所需的核心代理功能。
微软正在积极开发中。
它支持 Linux、Windows 和 HTTPS。
它有大量的文档和全面的维护文档。
它可以将请求灵活地路由到多个后端服务器。
它支持轻松定制,以满足特定需求。
- 它是生产级的,具有可扩展性,并针对性能进行了调整。
Tim 鼓励观众按照官方文档或 YARP 完整课程的建议,探索更多功能,如限制速率、替换模块和更深入的 API 网关设置。
最后的想法
通过观看 Tim Corey 设置 YARP 反向代理的完整视频,任何开发人员都可以快速掌握另一种反向代理。 无论您是处理复杂的负载平衡、更换模块,还是逐步升级网站,YARP Yet Another Reverse Proxy 都能为 .NET Core 世界提供坚实、灵活的解决方案。 请访问他的YouTube频道,了解更多有深度的视频。

