سوال اینجاست که چرا میگن NGINX یک reverse proxy هست؟ اصلا proxy چی هست؟
دو نوع پراکسی رایج و معکوس داریم که عبارتند از Reverse Proxy و Forward Proxy .
پراکسی فوروارد یا Forward Proxy سروری هست که بین گروهی از ماشینهای سرویس گیرنده و اینترنت قرار میگیرد. وقتی کلاینتها request هایشان را ارسال میکنند، Forward-Proxy بعنوان یک واسط عمل میکند و request ها را از کلاینت ها میگیرد و در سمت دیگر، به سمت وب سرورهای مقصدشان میفرستد و در نهایت پاسخ وب سرورها را گرفته و به کلاینتها بر میگرداند.
سوال اینجاست که این نوع پراکسی به چه دردی میخورد یا به عبارتی در کجا کاربرد دارد؟
در جواب باید گفت که این نوع از پراکسی، از اطلاعات هویتی کلاینتها یا به اصطلاح خودمان، از identity کلاینتها حفاظت میکند. به این صورت که اگر از یک فوروارد پراکسی استفاده کنیم، در آن صورت فقط آدرس IP کلاینتها حفظ میشود و در request header که به سمت وب سرور در نهایت ارسال میشود، آدرس IP پراکسی قابل مشاهده است.
ضمنا دلیل دیگری که از آن استفاده میشود، برای دور زدن محدودیت های وب سایتها یا ISP هاست. به این صورت که وقتی شما درخواستی به سمت وب سروری که شمارا محدود کرده یا از سمت ISP محدود شدید(فیلترینگ) بفرستید، درخواست شما توسط فایروال ISP یا سرور مقصد، ریجکت میشود. در این حال با داشتن یک forward proxy ، درخواست شما ابتدا به سروری که توسط ISP یا وب سرور مقصد محدود نیست ارسال میشود و سپس درخواست از آنجا به وب سرور مقصدتان ارسال میشود. طبیعتا در این حالت به درخواست شما پاسخ داده میشود.
پس در نهایت میتوان دلایل گفته شده را به این صورت خلاصه کرد:
· Protect the client’s online identity
· Bypass browsing restrictions
· Block access to certain content
بنابراین یک forward proxy بین کلاینتها و اینترنت قرار میگیرد و از سمت کلاینت عمل میکند.
نکته:
تو سازمانهای بزرگ، کلاینت برای استفاده از پروکسی نیاز به کانفیگ دارد تا بتواند از forward proxy استفاده کند؛ در این حالت، سازمانهای بزرگ از تکنیکی به نام transparent proxy استفاده میکنندتا این فرایند ساده تر شود. یک transparent proxy با سوییچ های لایه چهار کار میکند تا به طور اتوماتیک، انواع خاصی از ترافیک را به سمت proxy هدایت کند. برای استفاده از آن هم نیازی به کانفیگ سیستمهای سرویس گیرنده نیست. زمانی که کلاینت در شبکه سازمانی خودش هست، bypass کردن یک پراکسی برای آن کلاینت سخت میشود.
پراکسی معکوس یا reverse proxy بین اینترنت و وب سرورها قرار دارد و بنابراین از سمت وب سرور عمل میکند که این یعنی request های کلاینت ها را از اینترنت میگیرد و به وب سرورهای مقصدشان که در پشت این پراکسی قرار دارد میفرستد.
حال مجدد همان سوال...
چرا باید از یک پراکسی معکوس یا reverse proxy استفاده کنیم؟
خب دلیل اول مثل همان forward proxy هست یعنی محافظت از اطلاعات کلاینتهای خودش که این بار وب سرورها هستند. این یعنی آدرسهای IP وب سرورهای خودش را در header response نمیگذارد که البته این کار یک مزیتی که دارد، این است که این امر ، از مورد هدف قرار گرفتن وب سرور توسط حملات DDOSجلوگیری میشود یا تا حد امکان این امر کاهش می یابد.
دومین دلیل استفاده از این نوع پراکسی این میتواند باشد که این نوع پراکسی، برای لود بالانسینگ یا تقسیم ترافیک بین وب سرورها یا اپلیکیشن هایی استفاده شود که در پشت این پراکسی هستند. همیشه وب سایتهایی که ترافیک بالایی دارند از یک لودبالانسر برای متعادل کردن ترافیک ورودی استفاده میکنند تا با توزیع ترافیک بتوان به همه ی درخواستها با زمان کوتاهی پاسخ داد.
بنابراین به نظر، reverse proxy میتواند ترافیک ورودی را مدیریت کند. سرویس هایی هم مثل cloud flare سرورهایی را در سراسر دنیا بعنوان reverse proxy قرار داده که این کار باعث میشود ظرفیت پردازشی بالاتری را برای سرویس دادن فراهم اورد. به همین دلیل است که کلاودفلر میتواند بسیاری از حملات DDOS را خنثی کند.
سومین دلیل که برای وب سرورها بیشتر مفید است، استفاده از قابلیت caching است، یعنی بخشی از محتویات static وب سایت ها را برای مدتی معلوم ذخیره کنیم تا اگر درخواست همان محتویات بار دیگر توسط کلاینت به پراکسی رسید، دیگر ، وب سرور درگیر پاسخ و اصطلاحا serveکردن آن صفحه نشود بلکه سریعا همان محتوا به کلاینت در پاسخ برگردانده شود که اینکار باعث افزایش سرعت پاسخ در سایتها میشود.
دلیل چهارم این است که یک reverse proxy میتواند SSL Encryption را handleکند.
از نظر فرایندهای محاسباتی، SSL Handshake یک فرایند پر بار یا بعبارتی برای سرور هزینه بر هست. یک reverse proxy میتواند باعث بهبود این قضیه شود، به این صورت که بجای اینکه وب سرورها درخواست های SSL را مدیریت کنند، پراکسی معکوس ها این درخواستها را مدیریت میکنند و باعث میشوند که بار پردازشی و محاسباتی این نوع درخواستها از وب سرور ها برداشته شود.
همه ی وب سایتهای معروف مانند نتفلیکس، گوگل، اپل و ... از پراکسی معکوس استفاده میکنند. شما میتوانید در چندین لایه از reverse proxy استفاده کنید. مثلا در لایه اول از یک edge server مانند cloudflare استفاده کنید. در لایه دوم از یک API Gateway یا یک Load Balancer استفاده کنید. ( دقت کنید که بسیاری از شرکت های بزرگی که خدمات سرویس های ابری ارائه میدهند، از یک سرویسی استفاده میکنند که این دولایه را باهم در یک سرویس واحد، تحت عنوان ingress service ترکیب میکند.)