C#中的YARP介紹 - 如何建立一個反向代理
在.NET Core環境中有效管理網路流量時,反向代理成為不可或缺的工具。 YARP,全稱為Yet Another Reverse Proxy,是Microsoft的高靈活性和高可定制性的反向代理專案,專門為.NET生態系統構建。 在本文中,我們將深入了解如何使用YARP,跟隨Tim Corey在Intro To YARP In C# - How To Create a Reverse Proxy的詳細教學,展示如何在.NET Core網路應用程式中設定和使用YARP。
讓我們從介紹YARP開始,並探討您如何在自己的專案中利用這個代理框架。
什麼是反向代理?
在1:07時,Tim解釋反向代理位於使用者與後端伺服器之間,管理進來的請求並有效地將請求路由到適當的目的地。
Tim在1:45指出代理的重要性:不僅在於負載平衡,還能簡化請求標頭、用HTTPS保護連接,並確保後端服務不被直接存取。 通過使用反向代理,您可以輕鬆擴展您的net core應用程式,而不暴露您的內部結構。
YARP介紹
在5:11時,Tim介紹了YARP,即Yet Another Reverse Proxy。 Tim解釋,由於Microsoft意識到需要一個更適合其廣泛.NET應用需求的代理框架,因此建立了YARP。它被設計為一個提供核心代理功能的程式庫,具有模組化、強大和可擴展的特性。

該程式庫正在積極開發中,確保包含最新特性,並支持最新技術如Linux、Windows和雲環境。
此外,Tim強調YARP擁有詳盡維護的文件和豐富的文件,讓初學者更容易上手。
設置基本YARP專案
在6:14時,Tim在Visual Studio中使用net SDK開始了一個新專案。 他建立了一個基本的ASP.NET Core Web API專案,命名為Pessimistic API。

在7:02時,Tim修改專案,建立了一個模擬寒冷天氣服務的Pessimistic API。這個簡單的net core應用程式是YARP後面將代理到的後端伺服器。
Tim在8:44建議驗證專案,在繼續之前,確保範例服務對/weatherforecast的請求正確響應。
建立YARP Gateway
在9:04,Tim建立了一個名為YarpGateway的空ASP.NET Core專案。 這個專案充當反向代理。
Tim演示如何通過進入管理NuGet包和搜尋安裝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 web應用程式,使用catch-all route將所有流量代理到原始網站。

這個策略允許進行漸進式更新:Tim可以使用Razor重建和現代化頁面,同時支持由舊系統提供的舊內容。 根據路徑,進來的請求自動路由到原始網站或新內容。
用Razor Pages新增新功能
在34:30,Tim在升級專案中新增Razor Pages。 他展示了如何新增一個簡單的頁面(/more),由新應用程式直接提供服務,而其他一切則通過代理。
感謝YARP的靈活性,無需打擾現有後端服務即可新增新模組和功能。
實現進階路由和路徑轉換
在39:03時,Tim構建了一個/隨機路由,重寫路徑並隨機將使用者重定向到三個不同的課程頁面。
他使用YARP的轉換功能來在代理期間修改請求標頭和路徑,展示開發者如何根據具體需求微調行為。
Tim在44:03左右發現了一個錯誤並修正了它,強調對配置文件的小心注意。
設置迴圈負載平衡
在45:10時,Tim將隨機路由切換到了輪循。 這個簡單的配置更改提高了在多個頁面之間分配流量的可預測性。

這突顯了YARP的一個關鍵特性:只需通過配置方式即可輕鬆動態客製化行為,無需大量程式碼調整。
結論:為什麼選擇YARP?
在47:03,Tim總結了為何YARP是現代net core應用程式的關鍵工具:
它被設計成便於整合的程式庫。
它提供開發者所需的核心代理功能。
由Microsoft積極開發。
開箱支持Linux、Windows和HTTPS。
擁有詳盡的文件和綜合維護的文件。
它允許靈活地將請求路由到多個後端服務。
支持特定需求的輕鬆定制。
- 它是生產級的、可擴展的並針對性能進行了調整。
Tim鼓勵觀眾透過官方文件或建議的完整YARP課程來探索更多功能,如速率限制、替換模組和更深入的API網關設置。
最後的想法
透過觀看Tim Corey的完整影片,任何開發者都可以快速掌握另一個反向代理。 無論您是處理複雜的負載平衡、替換模組或漸進式升級您的網站,YARP Yet Another Reverse Proxy為net core世界提供了堅實靈活的解決方案。 您務必查看他的YouTube頻道以獲取更多有見地的影片。

