Nginx که بصورت “engine-ex” تلفظ می شود، یک وب سرور متن باز بوده که در حال حاضر به عنوان پروکسی معکوس (Reverse Proxy)، توزیع کننده متعادل فرآیندها (Load Balancer) و Cache HTTP نیز مورد استفاده قرار میگیرد.
در حال حاضر شرکت های معروف زیادی مثل Intel، Apple، Twitter، Facebook، Google، IBM و Microsoft از Nginx کمک می گیرند. Nginx ابتدا توسط Igor Sysoev در اکتبر سال ۲۰۰۴ ساخته شد و هدف آن ایجاد راه حلی برای مشکل C10K بود.
از آنجایی که Nginx با هدف بهبود عملکرد سرویس های وب ساخته شد، غالبا از سایر وب سرورهای محبوب در تست های بنچمارک بهتر عمل می کند. مخصوصا اگر این تست ها مربوط به محتوای استاتیک یا تعداد زیادی درخواست همزمان باشد.
Reverse Proxy : در شبکه های رایانه ای مانند اینترنت، پروکسی معکوس به نوعی متداول از سرور پروکسی میگویند که از شبکه های عمومی (Public) قابل دسترس است.
Load Balancer : در محاسبات، به فرآیند توزیع وظایف بر مجموعه ای از منابع با هدف افزایش کارآمدی پردازش کلی، Load Balancer یا توزیع کننده متعادل فرآیندها میگویند.
C10K Problem : اصطلاحی معروف در زمینه وب با موضوع مدیریت عملکرد ۱۰ هزار اتصال همزمان.
وب سرور Nginx چگونه کار میکند؟
وب سرور Nginx برای مدیریت تعداد بالای فرآیندهای همزمان با کمترین میزان استفاده از حافظه ساخته شده است. به جای ایجاد فرآیندهای جدید برای هر درخواست وب، Nginx از روشی همزمان و رویداد محور استفاده می کند که در آن درخواست ها در یک شاخه واحد بررسی می شوند.
در واقع با کمک Nginx، یک فرآیند اصلی (Master Process) میتواند چندین فرآیند کوچکتر که انجام کار را بر عهده دارند (Worker Process) کنترل کند. به این صورت که کار فرآیند اصلی تنها مدیریت فرآیندهای کارگر است و فرآیندهای کارگر، پردازش و دستور نهایی را انجام میدهند. از آنجایی که سیستم کاری Nginx همزمان است، هر درخواست میتواند توسط فرآیندهای کارگر انجام شود، بدون اینکه جلوی درخواست های دیگر گرفته شود. مهمترین ویژگی های Nginx عبارتند از:
- پروکسی معکوس به همراه حافظه پنهان (Cache)
- IPv6
- پشتیبانی از FastCGI به همراه حافظه پنهان (Cache)
- توزیع متعادل فرآیندها
- استفاده از WebSocketها
- مدیریت فایل های استاتیک، فایل های ایندکس و ایندکس سازی خودکار
- TLS/SSL به همراه SNI
FastCGI : یک پروتکل دودویی است که برنامه های تعاملی را با یک وب سرور مرتبط میسازد.
WebSocket : یک پروتکل ارتباطی رایانه ای است که کانال های ارتباطی کاملا دوطرفه را از طریق یک اتصال TCP ارائه میدهد.
TLS/SSL : یک پروتکل رمزنگاری است که برای تامین امنیت ارتباطات از طریق شبکه رایانهای طراحی شده است.
SNI : مخفف Server Name Indication، یک افزونه برای پروتکل شبکه رایانه ای TLS است.
مزایا و معایب استفاده از Nginx
مزایا
- کدهای نوشتاری در این وب سرور نسبت به رقبا ساده تر هستند.
- تنظیمات پیکربندی آن راحت است و طراحی مدرن تری نسبت به دیگر وب سرورها دارد.
- رویداد محور بوده و به شما این امکان را میدهد تا چندین ارتباط را همزمان مدیریت کنید.
- از حافظه و منابع سخت افزاری کمتری استفاده میکند.
- Nginx باعث افزایش سرعت سایت شده و کمک میکند تا رتبه بهتری در گوگل کسب کنید.
- سازگاری بیشتری با وب اپلیکیشن ها مثل Ruby، Python، Joomla و … دارد.
- در تبدیل محتوای داینامیک به محتوای استاتیک کمک کننده است.
- این امکان را میدهد تا در لحظه، هزاران اتصال همزمان را مدیریت کنید.
معایب
- انجمن های پشتیبانی کمتری نسبت به Apache دارد اما موارد استفاده آن بیشتر از Apache است.
- در مقایسه با Apache، ماژول ها و افزونه های کمتری به شما ارائه میدهد.
چرا از Nginx استفاده کنیم؟
دلایل زیادی وجود دارد که Nginx را انتخاب کنیم. مهمترین آنها را در لیست زیر میتوانید مشاهده کنید:
یک نقطه ورود واحد فراهم میکند : با محیطی که Nginx در اختیار شما قرار میدهد، ایجاد یک نقطه ورود برای دسترسی کاربران به خدمات، رویکرد بهتری است.
ذخیره سازی: سرور Nginx حافظه پنهانی (Cache) را برای محتواهای استاتیک و داینامیک فراهم کرده و باعث افزایش عملکرد میشود.
ارائه چندین برنامه بک-اند بصورت همزمان: خوشه (Cluster) Nginx به شما کمک میکند تا ترافیک برنامه های مختلف را بطور موثری مدیریت کنید که برای ارائه دهندگان خدمات ابری ایده آل است.
قابلیت انجام تست A/B: وب سرور Nginx از قابلیت تست A/B بهره میبرد که به گسترش برنامه های کوچک کمک شایانی میکند.
قابلیت ورود استاندارد: Nginx از فرمت ورود استاندارد HTTP استفاده میکند.
مقیاس پذیری و توزیع متعادل فرآیندها: قابلیت بررسی وضعیت در Nginx این امکان را میدهد تا زیرساخت های بک-اند را مقیاس بندی کنید.به این ترتیب افزودن یا حذف هر گونه اِلمان از سایت، تاثیری بر تجربه کاربر نخواهد داشت.
احتمال از کارافتادن ۰%: انجینکس عملکرد روان وب سرور را تنظیم میکند و به کمک آن میتوانید بدون هیچ گونه قطع اتصال، نرم افزار سیستم را بصورت یکپارچه بروزرسانی کنید.
کاهش احتمال حملات DoS: وب سرور انجینکس بخاطر مدیریت و رسیدگی به هزاران درخواست ورودی یا ترافیک HTTP و حفاظت از امنیت برنامه هنگام افزایش ترافیک سایت طرفداران زیادی را به خود جلب کرده است.
مقایسه آمار استفاده از nginx و Apache
Apache یکی دیگر از محبوب ترین وب سرورهای متن باز است که طبق گفته منبع موثق W3Techs، در حال حاضر توسط ۴۳٫۶% وبسایت های دارای وب سرور شناخته شده استفاده میشود (در سال ۲۰۱۸ این عدد ۴۷% بود). وب سرور Nginx با اختلاف بسیار کمی (۴۱٫۸%) در رده دوم قرار گرفته است.
اخیرا شرکت NetCraft نیز در بین ۲۳۳ میلیون دامنه ثبت شده نظرسنجی انجام داد که میزان استفاده از Apache را ۳۱٫۵۴% و Nginx را ۲۶٫۲۰% عنوان کرد.
در حالیکه Apache بصورت کلی محبوب ترین گزینه در بین وب سرورهاست، اما Nginx از نظر وبسایت های پربازدید محبوبیت بیشتری دارد. اگر میخواهید به قدرت Nginx پی ببرید، نگاهی به لیست زیر بیاندازید:
- ۹% از ۱۰۰,۰۰۰ سایت محبوب جهان از Nginx استفاده میکنند. (این عدد در سال ۲۰۱۸ تنها ۵۶٫۱% بود)
- ۱% از ۱۰,۰۰۰ سایت محبوب جهان از Nginx استفاده میکنند. (این عدد در سال ۲۰۱۸ تنها ۶۳٫۲% بود)
- ۱% از ۱۰۰۰ سایت محبوب جهان از Nginx استفاده میکنند. (این عدد در سال ۲۰۱۸ تنها ۵۷% بود)
در واقع Nginx توسط برخی از بزرگترین سایت های جهان مانند Netflix، Nasa و WordPress.com استفاده میشود.
اما میزان استفاده از Apache با میزان افزایش بازدید سایت ها رابطه عکس دارد و معمولا سایت هایی که پربازدید نیستند، بیشتر از Apache استفاده میکنند. لیست زیر میتواند درک بهتری از این موضوع برای شما فراهم کند:
- ۲۴% از ۱۰۰,۰۰۰ سایت محبوب جهان از Apache استفاده میکنند. (این عدد در سال ۲۰۱۸، ۲۷٫۱% بود)
- ۸% از ۱۰,۰۰۰ سایت محبوب جهان از Apache استفاده میکنند. (این عدد در سال ۲۰۱۸، ۲۱٫۵% بود)
- ۶% از ۱,۰۰۰ سایت محبوب جهان از Apache استفاده میکنند. (این عدد در سال ۲۰۱۸، ۱۶٫۲% بود)
همچنین اگر نگاهی به آمار جستجوهای گوگل بیاندازیم، میبینیم که از سال ۲۰۰۴، میزان جستجوی نام Apache روند نزولی داشته، در حالیکه جستجوی عبارت Nginx بتدریج در حال افزایش است.
چطور بفهمیم از Nginx استفاده میکنیم یا Apache؟
در اکثر سایت ها، به سادگی میتوانید از طریق هدرServer HTTP بررسی کنید که از کدام وب سرور استفاده میکنید. با کلیک بر روی گزینه network در Chroma Devtools میتوانید هدرهای HTTP را مشاهده کنید و یا از ابزارهایی مانند pingdom یا GTmetrix کمک بگیرید.
با این حال ممکن است هدر HTTP همیشه وب سرور اصلی را نشان ندهد. به عنوان مثال، اگر از سرویس های پروکسی مانند Cloudflare در سایت وردپرسی خود استفاده کنید، هدر HTTP Server، نام Cloudflare را نمایش میدهد.
نتیجه گیری
در این مقاله سعی کردیم به مبانی Nginx، تاریخچه مختصری از آن، جایگاه آن در فضای سرور و همچنین مزایای استفاده از انجینکس بپردازیم. بصورت کلی انجینکس یک وب سرور است که به عنوان پروکسی ایمیل، پروکسی معکوس و همچنین توزیع کننده متعادل فرآیندها عمل میکند. ساختار آن همزمان و رویدادمحور است تا پردازش همزمان چندین درخواست را تضمین کند و از همه مهمتر براحتی مقیاس پذیر است.