نرمافزار Nginx در واقع یک وبسرور (Web Server) است که میتواند بهعنوان پراکسی معکوس (Reverse Proxy)، توزیعکننده بار (Load Balancer) یا کش وب (Web Cache) نیز مورد استفاده قرار گیرد. در این مقاله، عملکردهای مختلف Nginx را بهصورت خلاصه مرور میکنیم. امیدوارم براتون مفید باشه.
وبسرور یا سرور HTTP نرمافزاری است که بر روی یک سرور سختافزاری نصب میشود و درخواستهای ارسالی از کلاینتها را در بستری مانند HTTP دریافت و به آنها پاسخ میدهد. این پاسخها یا به صورت ایستا (Static) از قبل در مسیری روی سرور ذخیره شدهاند یا به صورت پویا (Dynamic) توسط یک برنامه وب تولید میشوند و به سمت کلاینتها ارسال میگردند. بهعنوان مثال، فایلهای تصویری، ویدئوها یا فایلهای CSS و JavaScript میتوانند بهصورت ایستا روی سرور ذخیره و توسط وبسرور به کلاینت ارسال شوند. اما اطلاعاتی مانند محصولات خریداری شده توسط کاربر، دانشجویان برتر ترم جاری یا آگهیهای منقضیشده باید بهصورت لحظهای و پویا از دیتابیسها گردآوری و در قالب یک پاسخ مناسب به کلاینتها ارسال شوند.
یک سرور پراکسی در حالت عادی واسطهای میان یک کلاینت و سایر سرورها است. این سرور واسط، تمام درخواستهای کلاینت را دریافت و به سرورهای مقصد ارسال میکند. اما پراکسی معکوس برعکس این عملکرد است؛ بهجای اینکه مانند پراکسی معمولی (Forward Proxy) درخواستهای کلاینت به سرورهای مختلف ارسال شود، پراکسی معکوس درخواستهای تمام کلاینتها را دریافت کرده و به یک سرور خاص ارسال میکند.
با افزایش تعداد درخواستهای ارسالی به یک سرور، منابع بیشتری از سرور اشغال میشود و بار (Load) آن افزایش مییابد. با افزایش بار روی سرور، عملکرد آن دچار افت شده و پاسخدهی به درخواستها کند میشود. در این شرایط سرورهای فعلی پاسخگوی نیاز نیستند و باید سرورها را توسعه دهیم (Scale). شاید اولین راهحل افزایش قدرت پردازنده و حافظه باشد که به این روش "اسکیل عمودی" (Vertical Scaling) گفته میشود. اما روش بهتر معمولاً استفاده از "مزرعه سرور" (Server Farm) است که در آن چندین سرور با توان متوسط بهجای یک سرور قوی استفاده میشود و به این روش "اسکیل افقی" (Horizontal Scaling) گفته میشود. در این حالت، توزیعکننده بار (Load Balancer) با قرار گرفتن در جلوی ورودی مزرعه سرور، درخواستهای ورودی را بین چند سرور توزیع میکند.
ارائه محتوای ایستا توسط وبسرورها بسیار سادهتر و سریعتر از محتوای پویا است. برای تولید محتوای پویا معمولاً باید کوئریهای زمانبر به دیتابیسها ارسال شود یا الگوریتمهای پیچیدهای اجرا شوند. به همین دلیل، تولید چنین محتوایی کندتر است و منابع سختافزاری بیشتری از سرور را اشغال میکند. کش وب یا کش HTTP محتوای پویا که برای درخواستهای پرتکرار تولید شده را بهصورت ایستا ذخیره میکند و در درخواستهای بعدی از آن استفاده میشود. این کار باعث میشود که پاسخدهی به این درخواستها بسیار سریعتر انجام شده و همچنین بار (Load) روی سرور بهطور چشمگیری کاهش یابد.