Reverse Proxy یا پروکسی معکوس، واسطه ای در سمت سرور است که درخواست کاربران را دریافت می کند، به برنامه یا سرور مقصد می فرستد و پاسخ را به کاربر برمی گرداند. این ساختار یک نقطه ورود مشخص برای دسترسی به سرویس ها فراهم می کند؛ حتی اگر پشت آن، چند برنامه روی سرورها یا پورت های متفاوت اجرا شوند.برای شناخت پروکسی معکوس، باید جایگاه آن در مسیر ارتباط، تفاوتش با پروکسی معمولی و قابلیت هایی را که بسته به تنظیمات ارائه می دهد، بشناسیم. در این مقاله، این مفاهیم را با مثال توضیح می دهیم و یک نمونه ساده از استفاده در Nginx را بررسی می کنیم.
خلاصه سریع
• پروکسی معکوس در مقابل سرورهای ارائه دهنده سرویس قرار می گیرد.
• استفاده از آن به وجود چند سرور وابسته نیست.
• مسیریابی درخواست، مدیریت اتصال HTTPS و کش از کاربردهای احتمالی آن هستند.
• پروکسی معکوس می تواند توزیع بار هم انجام دهد، اما این دو مفهوم یکسان نیستند.
• امنیت و پایداری آن به طراحی زیرساخت و تنظیمات درست وابسته است.
Reverse Proxy چیست و چگونه کار می کند؟
پروکسی معکوس درخواست را به نمایندگی از سرویس مقصد دریافت می کند. کاربر با آدرس عمومی سایت ارتباط برقرار می کند و این واسطه، درخواست را به برنامه مناسب می رساند. برنامه مقصد پاسخ را تولید می کند و پروکسی معکوس آن را به کاربر برمی گرداند.سرور مبدا به سروری گفته می شود که برنامه یا محتوای اصلی روی آن قرار دارد. در این معماری، پروکسی معکوس جلوی سرور مبدا قرار می گیرد و مسیر دسترسی به آن را مدیریت می کند.برای مثال، یک برنامه ممکن است روی پورتی اجرا شود که مستقیما در اینترنت در دسترس نیست. پروکسی معکوس درخواست های دامنه عمومی را دریافت می کند و آنها را از مسیر داخلی به همان برنامه می فرستد.
مسیر درخواست و پاسخ در پروکسی معکوس
در یک سناریوی ساده، ارتباط چهار مرحله دارد:۱. ارسال درخواست: مرورگر کاربر درخواست را به آدرس عمومی سایت می فرستد و درخواست به پروکسی معکوس می رسد.۲. انتخاب مقصد: پروکسی معکوس براساس تنظیماتی مانند نام دامنه یا مسیر آدرس، مقصد را مشخص می کند.۳. پردازش درخواست: برنامه مقصد درخواست را پردازش می کند و پاسخ را برمی گرداند.۴. تحویل پاسخ: پروکسی معکوس پاسخ برنامه را به مرورگر کاربر می فرستد.این مسیر، حالت ارسال درخواست به برنامه است. اگر کش فعال باشد و پاسخ معتبر در آن وجود داشته باشد، بعضی درخواست ها می توانند بدون مراجعه دوباره به سرور مبدا پاسخ داده شوند.
یک مثال ساده از پروکسی معکوس
فرض کنید یک وب سایت دو برنامه دارد: برنامه اول صفحات سایت را نمایش می دهد و برنامه دوم اطلاعات محصولات را ارائه می کند.پروکسی معکوس می تواند درخواست های صفحات را به برنامه اول و درخواست های مسیر /api/ را به برنامه دوم بفرستد. کاربر با یک دامنه کار می کند، اما پشت آن، درخواست ها به مقصدهای متفاوت هدایت می شوند.Reverse Proxy نام یک نرم افزار مشخص نیست؛ یک نقش در معماری سرویس است. ابزارهایی مانند Nginx می توانند این نقش را اجرا کنند. همچنین یک برنامه روی یک سرور هم می تواند پشت پروکسی معکوس قرار بگیرد.
تفاوت Reverse Proxy و Forward Proxy چیست؟
Forward Proxy به نمایندگی از کاربران درخواست می فرستد؛ Reverse Proxy به نمایندگی از سرویس ها درخواست دریافت می کند. تفاوت اصلی آنها به این برمی گردد که واسطه برای کدام سمت ارتباط کار می کند.در پروکسی معمولی یا Forward Proxy، کاربران درخواست های خود را از طریق یک واسطه به اینترنت می فرستند. برای مثال، یک سازمان می تواند ترافیک خروجی کارکنان را از این مسیر عبور دهد تا سیاست های دسترسی خود را اجرا کند.در پروکسی معکوس، درخواست کاربران اینترنت به یک ورودی عمومی می رسد و از آنجا به سرورهای ارائه دهنده سرویس هدایت می شود.
آیا پروکسی معکوس همان VPN است؟
خیر. VPN معمولا یک تونل ارتباطی برای اتصال دستگاه یا شبکه به شبکه دیگری ایجاد می کند. پروکسی معکوس در سناریوی وب، درخواست های مربوط به یک سرویس را دریافت و به مقصد مناسب هدایت می کند.بنابراین، قرار دادن سایت پشت پروکسی معکوس به معنای ایجاد VPN برای بازدیدکنندگان آن نیست. همچنین نباید آن را ابزاری برای ناشناس شدن خودکار کاربران در نظر گرفت.
پروکسی معکوس چه کاربردهایی دارد؟
کاربرد اصلی پروکسی معکوس، مدیریت مسیر ارتباط کاربران با سرویس ها است. قابلیت های دیگر به ابزار انتخابی و تنظیمات آن بستگی دارند؛ صرف نصب یک نرم افزار، همه این امکانات را فعال نمی کند.
مسیریابی درخواست ها بین برنامه ها
پروکسی معکوس می تواند درخواست ها را براساس دامنه، زیردامنه یا مسیر آدرس به برنامه های مختلف بفرستد.برای مثال، صفحات اصلی سایت به یک برنامه و مسیر خدمات داده به برنامه دیگری هدایت می شوند. این روش زمانی مفید است که بخش های یک محصول مستقل توسعه یافته اند، اما باید از یک ورودی عمومی در دسترس باشند.
مدیریت HTTPS و گواهی TLS
پروکسی معکوس می تواند اتصال HTTPS کاربران را دریافت و مدیریت کند. در این حالت، تنظیم گواهی و سیاست های ارتباط امن در نقطه ورود انجام می شود.با این حال، امن بودن ارتباط کاربر با پروکسی، به معنای رمزگذاری خودکار ارتباط پروکسی با سرور مبدا نیست. مسیر دوم باید متناسب با شبکه و نیاز امنیتی پروژه طراحی شود؛ به ویژه زمانی که ترافیک از شبکه ای غیرقابل اعتماد عبور می کند.
کش کردن پاسخ های مناسب
کش می تواند نسخه ای از پاسخ های قابل ذخیره را نگه دارد تا درخواست های بعدی سریع تر پاسخ داده شوند و بار کمتری به برنامه برسد.اما همه پاسخ ها برای کش مشترک مناسب نیستند. اطلاعات حساب کاربری، سبد خرید یا داده های خصوصی نباید بدون قواعد دقیق ذخیره و به کاربران دیگر ارائه شوند. زمان اعتبار پاسخ و روش پاک کردن کش هم باید مشخص باشد.
کنترل ترافیک ورودی
بسته به ابزار و پیکربندی، می توان محدودیت نرخ درخواست، محدودیت اندازه فایل ارسالی یا سیاست های دسترسی را در نقطه ورود اعمال کرد.این کنترل ها به مدیریت مصرف منابع کمک می کنند، اما جایگزین بررسی مجوزهای کاربر، امنیت برنامه یا محافظت تخصصی در برابر حملات نیستند.
توزیع درخواست بین چند مقصد
اگر چند نمونه از یک برنامه آماده پاسخگویی باشند، پروکسی معکوس می تواند با پیکربندی مناسب، درخواست ها را بین آنها توزیع کند.در این سناریو، وضعیت مقصدها، ظرفیت آنها و محل نگهداری نشست کاربران اهمیت دارد. اضافه کردن چند مقصد، بدون بررسی این موارد، پایداری سرویس را تضمین نمی کند.
تفاوت Reverse Proxy و Load Balancer چیست؟
پروکسی معکوس نقش واسطه در مقابل سرویس را دارد؛ لود بالانسر وظیفه توزیع ترافیک بین چند مقصد را انجام می دهد. یک ابزار ممکن است هر دو نقش را همزمان اجرا کند، اما این دو اصطلاح مترادف نیستند.فرض کنید Nginx تمام درخواست های سایت را فقط به یک برنامه می فرستد. در این حالت، نقش پروکسی معکوس را دارد، اما توزیع بار بین چند مقصد انجام نمی دهد.اگر همان تنظیمات تغییر کند و درخواست ها بین چند نمونه برنامه تقسیم شوند، Nginx نقش لود بالانسر را هم اجرا می کند.
پس انتخاب بین این دو، همیشه انتخاب بین دو نرم افزار جدا نیست. ابتدا باید مشخص شود پروژه به یک واسطه برای دسترسی به برنامه نیاز دارد یا به توزیع ترافیک بین چند نمونه سرویس هم نیازمند است.
در مقاله «لود بالانسر چیست؟» می توانید الگوریتم های توزیع، بررسی سلامت مقصدها و نکات طراحی این ساختار را با جزئیات بیشتری بخوانید.
نمونه استفاده از Reverse Proxy در Nginx
فرض کنید یک برنامه روی همان سرور Nginx، در آدرس داخلی 127.0.0.1 و پورت 3000 اجرا می شود. هدف این است که درخواست های دامنه عمومی به آن برنامه برسند، بدون اینکه کاربر پورت داخلی را در آدرس وارد کند.نمونه زیر، یک تنظیم پایه برای نمایش این مفهوم است. این بلوک در بخش http پیکربندی Nginx، معمولا از طریق فایل تنظیمات سایت، قرار می گیرد.
این تنظیمات چه کاری انجام می دهند؟
در این مثال، Nginx درخواست های HTTP دامنه example.com را دریافت می کند و به برنامه روی پورت 3000 می فرستد.دستور proxy_pass مقصد درخواست را مشخص می کند. هدر Host نام میزبان درخواست را منتقل می کند و هدرهای دیگر، اطلاعاتی درباره آدرس درخواست کننده و نوع ارتباط ورودی به برنامه می رسانند.برنامه باید برای استفاده از این اطلاعات، تنظیمات اعتماد به پروکسی را داشته باشد. به ویژه هدرهای مربوط به IP نباید از هر فرستنده ای معتبر فرض شوند.آدرس 127.0.0.1 فقط وقتی مناسب است که برنامه از محیط اجرای Nginx روی همین آدرس قابل دسترسی باشد. اگر برنامه داخل کانتینر یا روی سرور دیگری اجرا شود، مقصد باید براساس همان شبکه تنظیم شود.
پیش از استفاده در سایت واقعی چه چیزهایی لازم است؟
این نمونه فقط HTTP را نشان می دهد و تنظیم کامل سایت عملیاتی نیست. برای استفاده واقعی، باید HTTPS، گواهی معتبر، دسترسی شبکه، تایم اوت ها و نیازهای برنامه بررسی شوند.اگر برنامه از WebSocket استفاده می کند، تنظیمات متناسب با آن هم لازم است. همچنین برنامه باید دامنه عمومی و نوع ارتباط را درست تشخیص دهد تا لینک ها، ریدایرکت ها و کوکی ها به درستی ساخته شوند.پیش از بارگذاری تغییرات، می توان صحت پیکربندی را با دستور زیر بررسی کرد:
این بررسی، درستی نحوی پیکربندی را ارزیابی می کند؛ دسترسی به برنامه و رفتار واقعی سایت باید جداگانه آزمایش شوند.
برای شناخت تفاوت نقش و قابلیت های دو وب سرور رایج، مقاله مقایسه Nginx و Apache را مطالعه کنید.
مزایا، محدودیت ها و نکات انتخاب پروکسی معکوس
پروکسی معکوس زمانی مفید است که یک نیاز مشخص را حل کند؛ مانند دسترسی عمومی به برنامه داخلی، مدیریت چند سرویس زیر یک دامنه یا متمرکز کردن تنظیمات ورودی.مزیت اصلی آن، ایجاد یک نقطه کنترل برای ارتباط با سرویس ها است. در مقابل، این واسطه هم به منابع، نگهداری، پایش و طراحی درست نیاز دارد.
مزایای پروکسی معکوس
• ورودی مشخص برای سرویس ها: کاربران از یک آدرس عمومی به برنامه های پشت آن دسترسی دارند.
• مدیریت متمرکز ارتباط: بعضی تنظیمات مانند گواهی TLS و قواعد هدایت در نقطه ورود مدیریت می شوند.
• انعطاف در تغییر مقصد: در بسیاری از سناریوها، جابه جایی برنامه به تغییر آدرس عمومی کاربر نیاز ندارد.
• کاهش درخواست به مبدا با کش: برای پاسخ های مناسب و با قواعد صحیح، مراجعه به برنامه کمتر می شود.
• کنترل دسترسی مستقیم: همراه با محدودیت های شبکه، می توان دسترسی عمومی به سرور مبدا را محدود کرد.
محدودیت ها و خطاهای رایج
خرابی نقطه ورود: اگر فقط یک پروکسی وجود داشته باشد و از دسترس خارج شود، کاربران ممکن است به برنامه سالم پشت آن هم دسترسی نداشته باشند.تنظیم اشتباه کش: ذخیره پاسخ خصوصی یا ارائه محتوای قدیمی می تواند مشکل امنیتی یا عملکردی ایجاد کند.تشخیص اشتباه HTTPS و IP: تنظیم نادرست هدرها و اعتماد برنامه به آنها ممکن است باعث ریدایرکت نامناسب، ثبت IP اشتباه یا رفتار نادرست کوکی ها شود.تایم اوت نامناسب: درخواست هایی که پردازش طولانی دارند یا فایل بزرگی ارسال می کنند، ممکن است با محدودیت های پیش فرض سازگار نباشند.گلوگاه منابع: پروکسی هم ظرفیت محدودی دارد. منابع ناکافی یا پیکربندی نامناسب می تواند باعث افزایش تاخیر شود.
آیا پروکسی معکوس امنیت سایت را تضمین می کند؟
خیر. پروکسی معکوس می تواند بخشی از طراحی امنیتی باشد، اما آسیب پذیری برنامه، رمزهای ضعیف یا دسترسی های نادرست را خودکار برطرف نمی کند.حتی پنهان کردن آدرس مبدا هم به تنهایی کافی نیست. اگر سرور مبدا همچنان از اینترنت قابل دسترسی باشد، ممکن است درخواست ها بدون عبور از کنترل های پروکسی به آن برسند. محدودیت دسترسی شبکه باید همراه با این معماری بررسی شود.
چه زمانی به Reverse Proxy نیاز داریم؟
اگر برنامه روی یک پورت داخلی اجرا می شود، چند سرویس باید از یک دامنه ارائه شوند یا به کنترل متمرکز ترافیک ورودی نیاز دارید، بررسی پروکسی معکوس منطقی است.اما ممکن است سرویس میزبانی یا زیرساخت فعلی شما همین نقش را از قبل انجام دهد. پیش از اضافه کردن یک واسطه جدید، مسیر موجود درخواست و مسئولیت هر بخش را مشخص کنید.
سوالات متداول درباره پروکسی معکوس
آیا پروکسی معکوس به چند سرور نیاز دارد؟خیر. یک برنامه روی یک سرور هم می تواند پشت پروکسی معکوس قرار بگیرد.آیا Reverse Proxy همیشه سایت را سریع تر می کند؟خیر. کش مناسب یا بهینه سازی ارتباط ممکن است عملکرد را بهتر کند، اما واسطه اضافی و منابع ناکافی هم می توانند تاخیر ایجاد کنند. نتیجه باید اندازه گیری شود.آیا Nginx فقط یک پروکسی معکوس است؟خیر. Nginx می تواند محتوای ثابت ارائه دهد و با تنظیمات مناسب، نقش پروکسی معکوس یا لود بالانسر را هم اجرا کند.آیا پروکسی معکوس جایگزین CDN است؟خیر. CDN برای ارائه محتوا از نقاط توزیع شده طراحی شده است و بسیاری از CDNها از معماری پروکسی معکوس استفاده می کنند. اما یک پروکسی معکوس روی سرور شما، به تنهایی شبکه توزیع محتوا ایجاد نمی کند.
طراحی مسیر دسترسی به برنامه با سربروس
انتخاب پروکسی معکوس باید براساس معماری برنامه، حساسیت داده ها، حجم ترافیک و نیازهای پایداری انجام شود. اگر برای مسیریابی درخواست ها، تنظیم Nginx یا بررسی دسترسی به سرور مبدا به کمک نیاز دارید، از طریق خدمات دواپس سربروس برای بررسی زیرساخت و دریافت مشاوره اقدام کنید.