C# 中的 YARP 介紹—如何創建反向代理
在.NET Core環境中有效管理網路流量時,反向代理成為不可或缺的工具。 YARP(Yet Another Reverse Proxy的縮寫)是微軟針對.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解釋說微軟意識到需要一個更適合其廣泛的.NET應用程式需求的代理框架,從而創建了YARP。它被設計為一個程式庫,提供模組化、魯棒和可擴展的核心代理功能。

這個程式庫正在積極開發中,確保它包含最新的功能並支持最新的技術,如Linux、Windows和雲環境。
此外,Tim強調YARP有詳盡的維護文檔和廣泛的文檔,讓新開發者更容易入門。
建立一個基本的YARP專案
在6:14,Tim使用net SDK在Visual Studio中新建了一個專案。 他創建了一個名為悲觀API的基本ASP.NET Core Web API專案。

Tim在7:02修改這個專案,創建了一個模擬寒冷天氣的悲觀API。這個簡單的net core應用程式是稍後將被YARP代理的後端伺服器。
Tim在8:44建議在繼續之前驗證專案,確保範例服務在/weatherforecast正確回應請求。
建立YARP Gateway
在9:04,Tim創建了一個名為YarpGateway的空ASP.NET Core專案。 此專案充當反向代理。
Tim講解如何在NuGet Packages管理頁面中安裝必要的套件,搜尋並安裝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演示了同時運行後端悲觀API和YarpGateway。
當您導航到網關的URL /weatherforecast時,YARP將傳入請求路由至後端伺服器,獲取響應並提供它——而不暴露內部URL。 這展示了代理功能和路由請求的運作。
擴展第二個後端
在21:17,Tim添加了另一個名為樂觀API的新專案,只返回溫暖的溫度。
他在一個叢集中配置了具有多個目的地的YARP。 這使得負載平衡成為可能——隨機分配進入的請求到兩個後端伺服器之間。
隨後在26:26,Tim解釋說,您可以進一步自定義負載平衡策略,包括基於請求屬性的選項,如輪詢或自定義邏輯。
使用YARP升級靜態網站
在28:12,Tim描述了真實世界的例子:升級他自己的网站 (iamtimcorey.com)。
他創建了一個WebsiteUpgrade net core網頁應用程式,將所有流量代理至原始網站,使用一個catch-all路由。

這個策略可以實現增量更新:Tim可以使用Razor重建和現代化頁面,同時支持舊系統提供的舊內容。 根據路徑,自動將傳入請求路由至原始網站或新內容。
使用Razor頁面添加新功能
在34:30,Tim在升級專案中添加了Razor頁面。 他演示了如何添加一個簡單的頁面 (/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頻道以獲取更多有見地的影片。
