Nginx یک وب سرور متن باز Open Source است که در سال 2004 توسط یک مهندس روسی عرضه شد . از همان ابتدا تمرکز اصلی Nginx روی بهرهوری بالا، همزمانی بالا و همچنین استفاده کمتر از حافظه تمرکز بود . وب سرور Nginx قابلیت های بیشتری نظیر توازن در بارگذاری، حافظه نهان، کنترل دسترسی و پهنای باند و قابلیت یکپارچهسازی موثر با برنامههای کاربردی فراوان را در خود جای داده که همین ویژگی ها Nginx را تبدیل به دومین وبسرور مجبوب جهان کرد . بسیاری از متخصصین حوزه هاستینگ و میزبانی وب Nginx را سریع ترین وب سرور حال حاضر می دانند و با توجه به متن باز و رایگان بودن آن می توان آینده بسیار موفقی برای Nginx تصور کرد
جالب است بدانید wordpress در هر ماه به 33 میلیون سایت و 3.4 میلیارد صفحه وب سرویس دهی می کند و با 339 میلیون کاربر در تعامل است. در واقع وردپرس از سال 2008 با افزایش 4.4 برابری بازدید مواجه شد و برای این که بتواند به این حجم از درخواست ها پاسخ بدهد مجبور شد به وب سرور Nginx مهاجرت کند. آسانی کار با این وب سرور و انعطاف پذیر بودن آن تیم وردپرس را شگفت زده کرده بود! به نحوی که آن ها در تست یکی از برنامه های خود مشاهده کرده بودند که 10000 درخواست در ثانیه توسط یک سرور Nginx ، پاسخ داده می شد.
طبق آمارها در سال 2012 وردپرس 70000 درخواست بر ثانیه را بر روی ترافیک 15Gbit/s توسط 36 لود بالانسر NGINX پاسخ دهی می کند. در حال حاضر بیش از 25 درصد 1000 سایت پرترافیک جهان توسط Nginx سرویس دهی می شود و بیش از 70 میلیون وب سایت نیز از Nginx بعنوان وب سرور استفاده می کنند.وب سایت هایی همچون Netflix،Pinterest،Github،Heroku و … از جمله آن ها هستند.
همواره یکی از بزرگترین چالشهای یک معمار وبسایت، همزمانی درخواستها بوده است. از ابتدای به وجود آمدن سرویسهای وب، تعداد درخواستهای همزمان در حال رشد است. برای یک وبسایت محبوب اصلا غیرمعمول نیست که بتواند به صدها هزار یا حتی میلیونها کاربر بهطور همزمان سرویس دهد. در دهه گذشته علت اصلی همزمانی، اتصالهای کند بود (کاربرانی با ارتباطات تماسی یا Dial-up). اما امروزه افزایش همزمانی علت دیگری دارد؛ ترکیبی از کاربران موبایل و معماریهای جدیدتر برنامههای کاربردی که معمولا برپایه نگهداشتن ارتباطی پایدار هستند و به کاربران اجازه میدهند با اخبار و اطلاعاتی که از طریق دوستان خود دریافت میکنند، بهروز شوند. عامل مهم دیگری که به افزایش همزمانی کمک میکند، تغییر رفتار مرورگرهای نوین است؛ اینگونه مرورگرها برای بالا بردن سرعت بارگذاری، چهار یا شش اتصال همزمان را با یک وبسایت برقرار میکنند.
برای نشان دادن مشکلی که برای ارتباط با اتصالهای کند بهوجود میآید، یک وب سرور مبتنی بر آپاچی را در نظر بگیرید که پاسخ نسبتا کوتاه صد کیلوبایتی (یک صفحه وب با متن یا یک تصویر) ارائه میکند. بارگذاری این صفحه میتواند ظرف کسری از ثانیه انجام شود اما برای کاربری با پهنای باند ۸۰ kbps بارگذاری این صفحه ده ثانیه طول خواهد کشید. پس این سرور وب با سرعت نسبتا زیادی میتواند صدکیلوبایت محتوا را گرفته، سپس برای ده ثانیه بهکندی آن محتوا را قبل از آزادسازی اتصال به کاربر بفرستد. حال تصور کنید شما هزار کاربر دارید که بهطور همزمان متصل هستند و محتوای یکسانی را درخواست کردهاند. اگر تنها یک مگابایت حافظه اضافی برای هر کاربر تخصیص یابد، تقریبا یکگیگابایت حافظه برای ارائه سرویس به تنها هزار کاربر با درخواست صدکیلوبایت محتوا نیاز است. یک سرور وب معمولی که بر پایه آپاچی باشد، باید بیش از یک مگابایت حافظه اضافی برای هر اتصال تخصیص دهد. اگرچه شرایط ارسال محتوا برای یک اتصال کند، میتواند بهوسیله افزایش اندازه بافرهای سوکت کرنل سیستمعامل بهبود یابد، ولی این کار یک راهحل کلی نیست و میتواند اثرات جانبی زیادی در پی داشته باشد.
با وجود اتصالهای مداوم و پایدار، مشکل کنترل همزمانی بیش از پیش نمایان میشود زیرا برای جلوگیری از تاخیر بهوجود آمده بهعلت سازماندهی اتصالهای جدید HTTP، ارتباط کاربران نباید قطع شود و برای هر کاربر متصل، میزان خاصی از حافظه بهوسیله سرور وب تخصیص پیدا میکند.
در نتیجه برای کنترل حجم کاری افزوده شده مرتبط با افزایش مخاطبان و افزایش تعداد کاربران همزمان، یک وبسایت باید برپایه تعدادی از بلاکهای موثر باشد. هر چند بخشهای دیگر مانند سختافزار، ظرفیت شبکه، نرمافزار و معماری ذخیره دادهها نیز مهم هستند، اما نرمافزار وب سرور است که اتصالهای کاربران را تائید و پردازش میکند، بنابراین سرور وب باید بتواند بهصورت غیرخطی و براساس افزایش تعداد درخواستها در هر ثانیه و اتصال های همزمان تغییر کند.
آیا استفاده از انجین ایکس فواید دیگری دارد؟
کنترل همزمانی بالا با بهرهوری و تاثیرپذیری بالا از فواید مهم بهکارگیری Nginx بوده است، ولی این سرور وب، فواید جالب دیگری نیز دارد. در چند سال گذشته، معماریهای وب، ایده تجزیه و جداسازی زیرساخت نرمافزاریشان از سرور وب را در پیش گرفتهاند؛ همانند آنچه قبلا در وبسایتهای مبتنی بر (Linux، MySQL، PHP، Python یا Perl) وجود داشت.
انجینایکس برای وبسرور بسیار مناسب است چرا که قابلیتهای کلیدی مورد نیاز برای کنترل همزمانی، پردازش تاخیر، SSL (لایه امن سوکتها)، محتوای ایستا، فشردهسازی و ذخیره در حافظه نهان، ازبینبردن اتصالها و درخواستهای غیرضروری و حتی جریان HTTP رسانه از لایه کاربردی به لایه موثرتر سرور وب را ارائه میکند. همچنین امکان یکپارچهسازی مستقیم با راهحلهای «بدون SQL» (یا NoSQL مانند memcached/Redis) را برای بالا بردن کارایی هنگام ارائه سرویس به تعداد زیادی از کاربران همزمان فراهم میسازد.
با وجود کیتها و زبانهای برنامهنویسی جدید توسعه، شرکتهای بیشتری اقدام به تغییر نحوه توسعه و بهکارگیری برنامههای کاربردی خود کردند و انجینایکس به یکی از اصلیترین اجزای این تغییرات تبدیل شد که توانست به بسیاری از شرکتها در جهت توسعه سریع سرویسهای وبشان کمک کند.
اولین خط های انجین ایکس در سال ۲۰۰۲ نوشته شد و سال ۲۰۰۴ بهعرضه عمومی رسید. تعداد کاربران Nginx در حال افزایش است که این مساله باعث افزایش ایدههای مشارکتی، خطاهای گزارششده، پیشنهادها و نظارتها شده است.
اساس کد انجینایکس مختص به خودش است که بهصورت کامل و از ابتدا با زبان برنامهنویسی C نوشته شده است. انجین ایکس به بسیاری از معماریها و سیستمعاملها مانند لینوکس، ویندوز، Mac OS X و FreeBSD نفوذ کرده است. این سرور وب، با داشتن کتابخانههای خود از ماژولهای استاندارد کتابخانهای C استفاده زیادی نمیکند.
اگرچه انجین ایکس در محیط ویندوز هم کار میکند، اما نسخه ویندوزی آن بیشتر نمایش است تا سرویس وب مناسب برای ویندوز. محدودیتهای خاصی که در Nginx و معماری کرنل ویندوز وجود دارد، موجب میشود انجین ایکس در همه حالات بخوبی کار نکند. مشکلات شناختهشده نسخه ویندوزی انجینایکس مواردی چون پشتیبانی از تعداد کمتری اتصالهای همزمان، بهرهوری پایینتر، ذخیره نکردن در حافظه نهان و نبود سیاستهای لازم برای مدیریت پهنای باند است.
Nginx می تواند به عنوان یک reverse proxy برای پروتکل های POP3،SMTP،HTTPS،HTTPT و IMAP به کار گرفته شود. همچنین به عنوان یک Load Balancer برای سرور های مختلفی مثل اپلیکیشن سرور و یا میل سرور می توان از Nginx استفاده کرد. وب سرور Nginx بر روی پلتفرم های مختلف مانند WINDOWS،LINUX،UNIX قابل اجراست. از نظر منابع نیز community های خوبی دارد و مطالب زیادی در اینترنت راجع به آن نوشته شده است.
Nginx یک master process و چندین worker process دارد. هدف master process خواندن و ارزیابی configuration ها و نگهداری worker process ها می باشد. worker process ها پردازش اصلی را بر روی درخواست ها انجام می دهند. Nginx از یک مدل event-driven و وابسته به سیستم عامل برای توزیع کردن درخواست ها بین worker process ها استفاده می کند. این عمل توزیع به دلیل این که وابسته به سیستم عامل است از منابع سیستم عامل به خوبی استفاده می کند و درخواست ها هیچ موقع block نمی شوند. تعداد worker process ها در فایل configuration قابل تعریف است و معمولا برابر تعداد هسته های سی پی یو تنظیم می شود.
همان طور که اشاره شد Nginx همانند APACHE دارای یک فایل تنظیمات اصلی به نام nginx.conf می باشد که معمولا در etc/nginx/ قرار گرفته است.
توصیه می کنیم حتما این وب سرور پرقدرت را امتحان کنید ، هم اکنون داتیس نتورک از وب سرور Nginx برای سرویس دهی استفاده می کند . در صورت تمایل به تست این وب سرور می توانید از سرویس های میزبانی لینوکس هوشمندنت هاستینگ استفاده کنید .