昨年11月、MicrosoftはYARP(Yet Another Reverse Proxy)をリリースした。これは、Microsoftがオープンソースプロジェクトとして過去数年間に開発したリバースプロキシプロジェクトである。
通常のプロキシは、プライベートネットワークとインターネットの間のゲートウェイとして機能するソフトウェアである。発信HTTPリクエストをリッスンし、通常はプライバシーまたはセキュリティ関連のタスクを実行する。
リバースプロキシは逆の方向で機能する。これは通常、ローカルネットワーク内、ファイアウォールの裏に配置され、着信リクエストをリッスンする。着信リクエストを適切なエンドポイントにリダイレクトするためのルーターとしてよく使用される。これは、複数のWebサーバーが1台のマシンで実行されている場合、または負荷分散システムがセットアップされている場合に使われる。
画像ソース: https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2021/11/image1.png
リバースプロキシはアプリケーション層(OSI層7)で機能する。つまり、トランスポート層(OSI層4)で機能する物理ルーターやファイアウォールとは異なり、URLとヘッダーに基づいてリクエストを処理する。
リバースプロキシプロジェクトは範囲が広いため、適切なソフトウェアを選択するのは難しい。しかし、まったく新しいアプリケーションを最初から開発する場合にも多くの時間がかかる。これらの考慮事項に基づいて、MicrosoftはYARPを考案した。これは、.NETを使ってカスタムリバースプロキシを構築するためのツールキットである。
YARPは、MicrosoftのASP.NETおよびネットワークのチームによってC#で記述されている。開発者が利用できるプロキシ関連の機能を提供する。ルートは、URLまたはHTTPヘッダーを使って定義できる。これらは、アプリケーション構成ファイル内、あるいはプログラムで、宛先と共に設定できる。リクエストをリダイレクトするだけでよいアプリケーションの場合、開発者は全てのYARPソリューションを実行する必要はない。直接転送と呼ばれる機能がある。これは、インターフェイスIHttpForwarder
を介して使用できる。これは、着信するAspNetCore
リクエストと発信するSystem.Net.Http
リクエストの間のコアプロキシアダプターを表す。
YARPには5つの負荷分散ポリシーがある。FirstAlphabetical
、Random
、PowerOfTwoChoices
(デフォルト)、RoundRobin
、LeastRequests
である。開発者は必要に応じてこれらを選択できる。
リバースプロキシツールの機能は他にも、宛先ヘルスチェック、URLおよびHTTPメソッドの変換、リクエストとその操作の追跡するためのパフォーマンスとログの測定がある。
これはYARPの最初の公式リリースである。それでも、Microsoftは、HTTP 3の完全サポート、パフォーマンスの向上、HttpClient
の使用法のLLHTTPへの置き換え、Kubernetesとの統合など、将来のリリースの機能をすでにリストアップしている。
MicrosoftにはYARPの実際のサポートチャネルを持っていない。しかし、バグや問題はGitHubで報告できる。セキュリティ上の懸念は、Microsoft Security Response Centerに連絡して、個別に報告する必要がある。
YARPの初めて使う場合、プロジェクトでそのNuGetパッケージを参照し、要件に従ってコーディングを開始する必要がある。このプロジェクトはオープンソースであり、.NET Core 3.1、.NET 5、.NET 6と互換性がある。したがって、Linux、macOS、Windowsのオペレーティングシステムで使用できる。プロジェクトのGitHubページでは、YARPのドキュメント、未解決の問題と未解決の問題、リリースされたばかりのリバースプロキシに関するディスカッションなどの詳細情報を閲覧できる。