📌معرفی YARP
YARP (Yet Another Reverse Proxy)
یک کتابخانه reverse proxy بسیار قابل تنظیم برای NET. است. این کتابخانه طراحی شده تا یک چارچوب پروکسی قابل اعتماد، منعطف، مقیاسپذیر، امن و آسان برای استفاده ارائه دهد. YARP به توسعهدهندگان کمک میکند تا راهکارهای reverse proxy قدرتمند و بهینه متناسب با نیازهای خاص خود ایجاد کنند. 🚀
کارکرد یک Reverse Proxy
یک reverse proxy سروری است که بین دستگاههای مشتری و سرورهای بکاند قرار میگیرد. این سرور درخواستهای مشتری را به سرور مناسب منتقل میکند و سپس پاسخ سرور را به مشتری برمیگرداند. Reverse proxy چندین مزیت دارد:
🔹️Routing:
هدایت درخواستها به سرورهای مختلف بکاند بر اساس قوانین از پیش تعریف شده، مانند الگوهای URL یا هدرهای درخواست. برای مثال، درخواستهای /images، /api و /db میتوانند به سرورهای image، api و database هدایت شوند.
🔹️Load Balancing:
توزیع ترافیک ورودی بین چند سرور بکاند برای جلوگیری از بارگذاری بیش از حد یک سرور خاص. این توزیع باعث افزایش عملکرد و قابلیت اطمینان میشود.
🔹️Scalability:
با توزیع ترافیک بین چند سرور، reverse proxy به برنامه کمک میکند تا بتواند کاربران و بار بیشتر را مدیریت کند. سرورهای بکاند میتوانند بدون تأثیر بر مشتری اضافه یا حذف شوند.
🔹️SSL/TLS Termination:
بار رمزنگاری و رمزگشایی TLS را از سرورهای بکاند برداشته و بار آنها را کاهش میدهد.
🔹️Connection abstraction, decoupling and control over URL-space:
درخواستهای ورودی از مشتری و پاسخهای خروجی از بکاند مستقل هستند. این استقلال امکان:
• استفاده از نسخههای مختلف HTTP (HTTP/1.1، HTTP/2، HTTP/3) و ارتقا یا کاهش نسخهها
• مدیریت طول عمر اتصالها، مانند نگه داشتن اتصال طولانی در بکاند در حالی که اتصالات کوتاه مشتری حفظ میشوند
• کنترل URL: URLهای ورودی میتوانند قبل از ارسال به بکاند تغییر داده شوند، و نقشه داخلی خدمات میتواند بدون تأثیر بر URL خارجی تغییر کند
🔹️Security:
نقاط انتهایی داخلی میتوانند از دید خارجی مخفی بمانند و از برخی حملات سایبری مانند DDoS محافظت کنند 🔒
🔹️Caching:
منابع پر درخواست میتوانند کش شوند تا بار روی سرورهای بکاند کاهش یابد و زمان پاسخ بهبود یابد
🔹️Versioning:
نسخههای مختلف یک API با استفاده از نگاشتهای مختلف URL پشتیبانی میشوند
🔹️Simplified maintenance:
Reverse proxies
میتوانند SSL/TLS Termination و وظایف دیگر را مدیریت کنند، که پیکربندی و نگهداری سرورهای بکاند را ساده میکند. برای مثال، گواهینامهها و سیاستهای امنیتی میتوانند در سطح پروکسی مدیریت شوند به جای هر سرور جداگانه 🛠
نحوه مدیریت HTTP توسط Reverse Proxy
یک reverse proxy درخواستها و پاسخهای HTTP را به این صورت مدیریت میکند:
🔸️دریافت درخواستها: پروکسی روی پورتها و endpoints مشخص به درخواستهای HTTP مشتریان گوش میدهد.
🔸️Terminating Connections:
اتصالات HTTP ورودی در پروکسی خاتمه مییابند و اتصالات جدید برای درخواستهای خروجی ایجاد میشوند.
🔸️Routing requests:
بر اساس قوانین و تنظیمات از پیش تعریف شده، پروکسی تعیین میکند که کدام سرور بکاند یا خوشهای از سرورها باید درخواست را پردازش کنند.
🔸️Forwarding requests:
پروکسی درخواست مشتری را به سرور مناسب ارسال میکند و مسیر و هدرها را در صورت نیاز تغییر میدهد.
🔸️Connection pooling:
اتصالات خروجی به صورت pooled مدیریت میشوند تا بار اتصال کاهش یابد و از مزایای HTTP 1.1 و درخواستهای موازی HTTP/2 و HTTP/3 استفاده شود
🔸️Processing responses:
سرور بکاند درخواست را پردازش کرده و پاسخ را به پروکسی ارسال میکند
🔸️Returning responses:
پروکسی پاسخ را از سرور دریافت و به مشتری برمیگرداند و در صورت نیاز تغییرات لازم روی پاسخ اعمال میکند ✅
این روند اطمینان میدهد که مشتری با پروکسی تعامل دارد نه مستقیماً با سرورهای بکاند، و مزایای load balancing، امنیت، versioning و غیره را فراهم میکند.