مقدمه ای بر NGINX
NGINX، که به صورت 'engine ex' تلفظ می شود، یک نرم افزار وب سرور متن باز و پرکاربرد است. Nginx پروژه ای بود که توسط Igor Sysoev در سال 2002 شروع شد و به صورت رسمی در اکتبر 2004 عرضه گردید. این وب سرور جهت حل مشکل C10K ساخته شد که چالشی جهت مدیریت 10 هزار کانکشن به صورت همزمان بود. امروزه محدودیتی در خصوص تعداد کانکشن هایی که درون شبکه برقرار می شوند وجود ندارد. جهت فائق آمدن بر این مسئله، Nginx با معماری رویدادگرا و ناهمگام معرفی گردید که با معماری فرآیندگرا سنتی کاملا متفاوت است. به همین خاطر است که Nginx به عنوان قابل اطمینان ترین وب سرور در نظر گرفته می شود زیرا سرعت و مقیاس پذیری خود را در شرایط مختلف حفظ می کند.
تصویر(1)
در حال حاضر Nginx بخشی از شرکت F5 Networks است. در سال 2019 شرکت F5 وب سرور Nginx را خریداری کرد که در رشد و توسعه F5 از یک شرکت سخت افزاری به یک شرکت سرویس محور کمک شایانی نمود. قبلا Nginx تنها در خصوص سرویس دهی HTTP عمل می کرد اما از آن زمان تا به امروز این وب سرور تکامل پیدا کرده است و حالا می تواند به عنوان Reverse proxy، HTTP load balancer، Media streaming و email proxy برای پروتکل های IMAP، POP3 و SMTP نیز سرویس دهی کند. Nginx یکی از وب سرور هایی است که به خاطر توانایی در مدیریت تعداد زیاد کانکشن ها با سرعت فوق العاده، انتخاب شده و ترجیح بسیاری از وب سایت های پرترافیک است لذا رقیب مهم HTTP سرور آپاچی در بازار وب سرور ها می باشد.
پیش تر، هر درخواست کلاینت به عنوان یک thread (رشته) مجزا مدیریت می گردید که با افزایش کانکشن ها مدیریت درخواست ها نیز پیچیده شده و منجر به تاخیر در پاسخ دهی و کندی وب سرور می شد. جابهجایی بین thread های مختلف نیازمند بکارگیری CPU به همراه مصرف بیشتر از معمول حافظه سیستم (RAM) و همچنین CPU time بیشتر (میزان زمان پردازش دستورالعمل ها توسط پردازنده) است، که به تبع، عملکرد وب سایت را تحت تاثیر قرار می دهد. با استفاده از Nginx شما می توانید به عملکردی 10 برابر بهتر به همراه استفاده بهینه تر از منابع دست پیدا کنید.
Nginx چیست؟
Nginx یک وب سرور است اما معمولا به عنوان reverse proxy (منظور از Reverse Proxy نوعی از پروکسی سرور است که منابع مورد نیاز را از یک یا چند سرور مختلف دریافت کرده و در اختیار کاربر قرار میدهد) استفاده می شود. Nginx به عنوان وب سرور و همچنین reverse proxy می تواند به طور کارآمدی مقیاس پذیر (سیستمی که بتواند خواسته های در حال افزایش را پاسخ دهد) باشد. این وب سرور به شما امکان اختصاص یک process به یک کانکشن خاص را نمی دهد، اما یک process pool (قابلیتی که میتواند تعدادی پروسه را در قالب یک مجموعه مدیریت و صف بندی کرده و سرویس موردنظر را در اختیارشان قرار بدهد) ایجاد می کند که به سادگی می تواند درون شبکه بین چندین کانکشن به اشتراک گذاشته شود. هر زمان که درخواستی ارسال می شود، منبعی به process مربوطه اختصاص داده خواهد شد. این مورد موجب استفاده بهینه تر از منابع و در نتیجه مدیریت ساده تر کانکشن ها در تعداد بالا می شود.
تصویر(2)
Nginx همچنین در ایجاد ارتباطی ایمن بین مراکز داده شما و شبکه بیرونی مفید است. این مورد به عنوان یک متعادل کننده بار ترافیکی پروتکل HTTP (HTTP load balancer) عمل می کند که به شما امکان استفاده از چندین مکانیزم تقسیم بار (load-sharing) متفاوت را می دهد.
مزیت های استفاده از Nginx
- کد بیس (code base) نوشته شده برای Nginx یکپارچه تر از سایر وب سرور ها است.
- فرمت پیکربندی آن کاربر پسندتر است و طراحی مدرن تری نسبت به سایر وب سرورها دارد.
- رویدادگرا است و به دلیل قابلیت تعویض زمینه (context switching)، امکان مدیریت چندین کانکشن بدون داشتن سربار را می دهد. (در علوم کامپیوتر، context switching به فرایند ذخیره وضعیت یک process یا thread گفته می شود. این وضعیت باید ذخیره شود تا امکان بازیابی و از سرگیری یک task وجود داشته باشد. این مورد یک ویژگی اساسی در سامانه های چند وظیفه ای (Multitasking) می باشد.)
- از حافظه و منابع کمتری استفاده می کند.
- Nginx موجب سریع تر شدن وب سایت شده و به آنها در کسب رتبه بهتر گوگل کمک می کند.
- با وب اپلیکیشن های متداول همانند ruby، python، Joomla و… سازگاری دارد.
- تبدیل محتوای پویا (dynamic) به محتوای ایستا (static) را بهبود می بخشد.
- در مدیریت هزاران کانکشن همزمان موثر و مفید است.
معایب استفاده از Nginx
- در زمینه پشتیبانی، دارای اجتماعی(انجمن هایی) کوچکتر از آپاچی است اما کاربرد (use case) بیشتری از آپاچی دارد.
- در مقایسه با آپاچی، ماژول ها و افزودنی های زیادی ارائه نمی دهد.
چرا از Nginx استفاده شود؟
دلایل زیادی برای انتخاب وب سرور Nginx وجود دارد که مهمترین آنها در زیر بیان شده اند:
- فراهم سازی single entry point: در یک پلتفرم کانتینری، شما می توانید هر زمان که نیاز باشد، کانتینر ها را راه اندازی یا از بین ببرید. اما در عین حال به یک single entry point ثابت (وظیفه دریافت درخواست و فوروارد آن به کانتینر موردنظر کاربر را دارد) جهت دسترسی کاربران به سرویس ها نیاز دارید که این مورد توسط وب سرور Nginx به خوبی فراهم می شود.
- کشینگ: این وب سرور با فراهم کردن کش برای محتوای ایستا (static) و همچنین محتوای پویا (dynamic)، عملکرد سرور را بهبود می بخشد.
- فراهم سازی چندین برنامه backend به صورت همزمان: کلاستر Nginx به مدیریت ترافیک اپلیکیشن های مختلف کمک می کند که یک ویژگی ایده آل برای سرویس دهنده های ابری است.
تصویر(3)
- قابلیت A/B Testing: این وب سرور از قابلیت A/B testing استفاده می کند که در راه اندازی اپلیکیشن های مایکروسرویس (اپلیکیشن های کوچک) مفید است. Nginx می تواند بر اساس یک سری معیارها، ترافیک را بین دو یا چند مقصد مختلف تقسیم کند. این امکان وجود دارد که در هنگام پیاده سازی یک مایکروسرویس جدید، ترافیک ورودی را تقسیم کرده تا بعنوان مثال فقط یک درصد از کاربران شما به مایکروسرویس مربوطه هدایت شوند. این ویژگی به شما اجازه می دهد که ترافیک شبکه را مانیتور کرده، شاخص های کلیدی عملکرد (KPI) را سنجیده و مدیریت لحظه ای ترافیک توسط هر دو ورژن را با هم مقایسه کنید.
- لاگ برداری تلفیقی: Nginx دارای فرمت استاندارد لاگ برداری HTTP است. با استفاده از Nginx می توانید از پیچیدگی ایجاد و نگهداری access log ها بکاهید.
- مقیاس پذیری و توزیع متعادل پروسه ها: مطابق با وضعیت وب سرور به شما امکان تغییر مقیاس زیرساخت back-end داده می شود. بنابراین، اضافه کردن یا حذف کردن هر المنت از سایت بر روی تجربه کاربری تاثیرگذار نخواهد بود.
- داون تایم صفر: Nginx کارکرد پایدار وب سرور را تضمین می کند و امکان بروزرسانی نرم افزار سیستم را بدون قطعی فراهم می کند.
- کاهش احتمال حملات DoS : وب سرور Nginx به مواردی همچون مدیریت تعداد زیاد درخواست های ورودی یا ترافیک HTTP، تضمین امنیت نرم افزار در هنگام ترافیک سنگین، پاسخ های کش متداول و تحویل روان درخواست ها معروف است. Nginx همانند یک کنترل کننده برای اپلیکیشن شما عمل می کند و با کنترل ترافیک و اعمال محدودیت از overload شدن (بارگذاری بیش از حد) API ها و URL های آسیب پذیر محافظت می کند.
نتیجه گیری
در این مقاله که مقدمه ای بر مبانی Nginx است، تاریخچه مختصری از چگونگی و علت ساخت، موقعیت آن در بین وب سرور ها و همچنین مزایای استفاده از این وب سرور بیان گردید. Nginx وب سروری است که می تواند به عنوان email proxy، reverse proxy و load balancer عمل کند. ساختار Nginx بصورت ناهمگام و همچنین رویدادگرا است که پردازش چندین درخواست به طور همزمان را تضمین می کند. Nginx به سادگی مقیاس پذیر است و متناسب با ترافیک ورودی تغییر مقیاس می دهد.