مقایسه وبسرور Apache و NGINX؛ کدام را انتخاب کنیم؟
۲۳ مرداد ۱۳۹۹
در این مطلب، تفاوت میان وبسرورهای Apache و Nginx را با جزئیات بررسی میکنیم.
- کدامیک از وبسرورهای Apache و Nginx سریعتر است؟
- محدودیتها و نقاط قوت اصلی این وبسرورها کدامند؟
- انتخاب کدام وبسرور برای پروژهتان، مناسبتر است؟
در ادامه با بررسی وبسرورهای Apache و Nginx همراه باشید.
مقایسه Apache و NGINX
اصلیترین و مهمترین تفاوت میان وبسرورهای Apache و Nginx در طراحی معماری آنها است. در واقع Apache از یک رویکرد مبتنی بر فرایند (process) استفاده کرده و برای هر درخواست یک Thread جدید ایجاد میکند. درحالیکه Nginx با استفاده از یک معماری مبتنی بر رویداد (event)، چندین درخواست را بر روی یک Thread مدیریت میکند.
سرور HTTP آپاچی چیست؟
سرور HTTP Apache یک وبسرور متنباز و کراسپلتفرم است که با نامهای Apache و httpd آن را میشناسیم. در ادامه برخی از مهمترین نکتههای Apache را مرور میکنیم.
- بنیاد نرمافزاری Apache، نام تجاری و خدمات خود را مدیریت میکند.
- وبسرور Apache توسط گروهی از توسعهدهندگان که در پیشبرد اهداف متنباز فعالیت میکنند، تحت نظارت سیستم ASF (The Apache Software Foundation) توسعه داده میشود.
- Apache بهصورت عمده بر روی لینوکس اجرا میشود و در حدود ۴۶ درصد از کل وبسایتهای سراسر جهان را در اختیار دارد.
- Apache یکی از کلیدیترین کامپوننتهای LAMP است که شامل Linux، Apache، MySQL و PHP میشود.
وبسرور NGINX چیست؟
وبسرور Nginx که بهصورت Engine X (انجینایکس) تلفظ میشود، وبسروری است که در سال ۲۰۰۴ توسط Igor Sysoev، مهندس نرمافزار روسی، رونمایی شد. در حال حاضر Nginx چیزی فراتر از یک وبسرور است. در ادامه مهمترین نکتههای وبسرور Nginx را مرور میکنیم.
در ابتدا وبسرور Nginx بهصورت عمده بهعنوان مکمل Apache مورد استفاده قرار میگرفت.
در گذشته وبسرور Nginx بیشتر برای ارائه فایلهای استاتیک مورد استفاده قرار میگرفت، اما امروزه Nginx بهعنوان یک وبسرور کامل تا جایی تکامل یافته که میتواند به کل وظایف سرور رسیدگی کند.
در حال حاضر، وبسرور Nginx اغلب بهعنوان یک پروکسی معکوس، متعادلکننده بار ترافیک کاری، mail proxy و همچنین برای دسترسی به HTTP caching نیز بهکار گرفته میشود.
باید توجه داشته باشید که هر دو وبسرور Apache و Nginx عمدهترین وبسرورهای مشترک لینوکس بهشمار میروند. این دو وبسرور بهکمک یکدیگر به بیش از ۵۰ درصد ترافیک وب خدماترسانی میکنند.
اگرچه Apache و Nginx ویژگیهای مشترکی دارند، اما در بسیاری از موارد متفاوت هستند. هر یک از این دو وبسرور بهنوبه خود برتریهایی دارد و هر یک از آنها کاربردها و سناریوهای منحصر به خودشان را دارند. برای آنکه این دو وبسرور را مقایسه کنیم، نیاز داریم که تفاوتهای آنها را بهصورت دقیق و جزئی بررسی کنیم. بنابراین در ادامه وبسرورهای Apache و Nginx را از نقطهنظرهای مختلف با جزئیات مقایسه میکنیم و در هر مورد برنده مقایسه را مشخص میکنیم.
سبک معماری پایه Apache و NGINX
اگر بخواهیم دو وبسرور Apache و Nginx را مقایسه کنیم، باید به اولین و مقدماتیترین تفاوت این دو وبسرور یعنی معماری پایه آنها بپردازیم. بهعبارتی روش مدیریت اتصالات، ترافیکهای شبکه و همچنین نحوه پاسخگویی به شرایط مختلف ترافیک شبکه در وبسرورهای Apache و Nginx متفاوت است. چراکه Apache از یک معماری با رویکرد فرایند-محور و Nginx از یک معماری متفاوت با رویکرد رویداد-محور بهره میبرد.
وبسرور Apache
وبسرور Apache یک رویکرد چند Thread را دنبال میکند. این سرور انواع مختلفی از ماژولهای پردازشی چندگانه را ارائه میکند. این ماژولهای از پیش ساختهشده اساسا بر پایه یکی از سه نوع الگوریتم پردازش پاسخها عمل میکنند که هر الگوریتم برای نیازهای مختلف سرور مناسب است.
این ماژولهای چند پردازشی (MPMها) یک معماری انعطافپذیر را ارائه میکنند که میتواند اتصالات مختلف و الگوریتمهای پاسخگویی گوناگون را انتخاب کند. علاوهبر این، نسخههای مختلف Apache 2 نیز ماژولهای پردازشی مختلفی را بهکار میگیرند.
سه ماژول MPM اصلی وبسرور Apache عبارتند از:
- ماژول Pre-fork
- ماژول Worker
- ماژول Event
نسخه قدیمی Apache (آپاچی ۲.۲) بر روی حالت Pre-fork یعنی ماژول mpm_prefork پیکربندی شده است. در حالیکه نسخه جدید Apache (آپاچی ۲.۴) بهگونهای پیکربندی شده است که از ماژولهای mpm_event و php-fpm استفاده میکند.
همانطور که گفتیم، نسخه Apache 2.2 بر روی حالت Pre-fork (ماژول mpm_prefork) پیکربندی شده است. بنابراین میتواند به مجموعهای از چند فرایند پاسخ بدهد که هر فرایند میتواند در یک زمان واحد تنها به یک درخواست خدماترسانی کند. بهعبارت دیگر، وبسرور Apache در هر زمان یک Thread جدید ایجاد میکند که به پردازش هر یک از درخواستهای اتصال میپردازد.
Thread چیست؟
هر Thread کوچکترین دنبالهای از دستورالعملهای برنامهریزیشده است که میتواند بهصورت مستقل و جداگانه توسط یک زمانبند یا scheduler مدیریت شود. در بیشتر موارد، یک Thread جزئی از یک فرایند است. بههرحال، معماری پایه وبسرور Apache میتواند منجر به مصرف سنگین و بیش از حد منابع شود؛ از این رو ممکن است مشکلهایی مانند سرعت پایین سرور را برای کاربران رقم بزند.
وبسرور NGINX
وبسرور Nginx از یک معماری مبتنی بر رویداد (event) استفاده کرده و بهطور غیرهمزمان درخواستها را پردازش میکند. این معماری بهگونهای طراحی شده است که از یک الگوریتم مبتنی بر رویداد non-blocking برای پردازش اتصالات استفاده میکند. بنابراین یک فرایند در معماری مبتنی بر رویداد وبسرور Nginx میتواند بهکمک یک Thread پردازشی، هزاران درخواست اتصال را پردازش کند. این ماژولهای پردازشی وبسرور Nginx را قادر میسازند که علیرغم محدودیت منابع، با سرعت بالا و گستره زیادی کار کند.
علاوهبراین، شما میتوانید از وبسرور Nginx بر روی سیستمهایی با توان پردازشی پایین و سیستمهایی که فشار بار سنگینی متحمل میشوند، نیز استفاده کنید.
برنده رقابت معماری پایه سرور
وبسرور Nginx معماری پایه بهتری دارد. چراکه ساختار سبکوزنتری دارد و این معماری بسیار سریعتر از معماری پایه وبسرور Apache عمل میکند.
عملکرد Apache و NGINX برای محتوای استاتیک و داینامیک
دو وبسرور Apache و Nginx محتوای استاتیک و داینامیک را بهصورت متفاوت پردازش میکنند. گفته میشود که Nginx عملکرد بهتری در پردازش محتوای استاتیک دارد. اما آیا این گفته درست است؟ بیایید بررسی کنیم.
الف) محتوای استاتیک
وبسرور Apache
فایلها یا محتوای استاتیک عموما فایلهایی هستند که بر روی دیسک یا سرورهای کامپیوتر ذخیره میشوند. بهعنوان مثال، فایلهای CSS، JavaScripts یا تصاویر نمونههایی از فایلهای استاتیک هستند.
وبسرور Apache با استفاده از روش متداول مبتنی بر فایل به پردازش محتوای استاتیک میپردازد.
وبسرور NGINX
از آنجایی که وبسرور Nginx برای پردازش بارهای کاری طراحی شده و امکانات بهتری دارد، برای سرویسدهی به محتوای استاتیک نیز عملکرد بسیار سریعتر و مقبولتری دارد. بر اساس یک benchmark که برای بررسی عملکرد سرعت دو سرور در اجرای همزمان بیش از ۱۰۰۰ اتصال همزمان انجام شده است، عملکرد وبسرور Nginx در حدود ۲.۵ برابر سریعتر از وبسرور Apache اعلام شد.
از سوی دیگر، Apache برای پردازش تمامی درخواستها، سربار پرهزینهای متحمل میشود. از این رو میتوان گفت که وبسرور Nginx تقاضای کمتر و عملکرد بهینهتری در استفاده از منابع سیستم دارد.
تصویر زیر شمار درخواستهای محتوای استاتیک که در هر ثانیه پردازش میشوند، برای دو وبسرور Apache و Nginx، را نشان میدهد.
ب) محتوای داینامیک
وبسرور Apache
وبسرور Apache میتواند بهتنهایی محتوای داینامیک وبسرور را بدون نیاز به هیچگونه اجزای خارجی، پردازش کند.
اگر بخواهیم عملکرد سرورهای Apache و Nginx را برای پردازش محتوای داینامیک مقایسه کنیم، باید بگوییم که اگرچه وبسرور Nginx بهتر از Apache نیست، اما عملکرد برابری در زمینه پردازش محتوای داینامیک دارند.
تصویر زیر تعداد درخواستهای محتوای داینامیک در هر ثانیه را برای دو وبسرور Apache و Nginx نشان میدهد که بیانگر عملکرد برابر دو سرور است.
وبسرور NGINX
در واقع Nginx نمیتواند بهخوبی Apache در پردازش محتوای داینامیک، عمل کند. Nginx تمامی درخواستها برای محتوای داینامیک صفحههای وب را به یک فرایند خارجی، مانند PHP-FPM، واگذار میکند تا اجرا شوند.
به این ترتیب، وبسرور Nginx منتظر میماند که محتوای نهایی را از این فرایند خارجی دریافت کرده و در نهایت آن را به مشتری تحویل بدهد. تصویر زیر روند کار وبسرور Nginx را برای پردازش درخواستهای مربوط به محتوای داینامیک صفحههای وب، نشان میدهد.
وبسرور Nginx زمانی میتواند محتوای داینامیک درخواستی را به کاربران ارائه کند که از کنترلکنندههای SCGI و ماژول FastCGI استفاده کنند.
این فرایند کمی پیچیده بهنظر میرسد. بههرحال، این روند عملکرد وبسرور Nginx را در پردازش محتوای داینامیک، بسیار سریعتر میکند.
برنده رقابت عملکرد دو سرور
Nginx در پردازش محتوای استاتیک، وبسرور Apache را پشت سر میگذارد و عملکرد بسیار بهتری دارد. اما در رابطه با محتوای داینامیک، هر دو سرور عملکرد مطلوب و خوبی دارند.
پشتیبانی وبسرورهای Apache و NGINX از سیستم عامل
پشتیبانی از انواع سیستمعاملها یکی دیگر از نکتههای مهم وبسرورها است که باید به آن توجه داشته باشیم. هر دو وبسرور Apache و Nginx در زمینه پشتیبانی از سیستمعامل عملکرد مشابهی دارند که در ادامه بررسی میکنیم.
وبسرور Apache
وبسرور Apache بر روی تمامی سیستمعاملهای شبیه Unix (مانند Linux و BSD) قابلاجرا است. این سرور همچنین از سیستمعامل ویندوز شرکت مایکروسافت نیز بهطور کامل پشتیبانی میکند.
وبسرور NGINX
وبسرور Nginx نیز درست مانند Apache از تمامی سیستمعاملهای مدرن شبیه Unix و همچنین ویندوز مایکروسافت بهطور کامل پیشتیبانی میکند. اما متاسفانه برخلاف سایر سیستمعاملها، این سرور در رابطه با سیستمعامل ویندوز مایکروسافت عملکرد قدرتمند و پشتیبانی توانمندی ندارد.
برنده رقابت پشتیبانی از سیستمعاملها
همانطور که بالاتر اشاره کردیم، وبسرورهای Apache و Nginx از سیستمعاملهای مشابه یونیکس و همچنین ویندوز مایکروسافت بهطو کامل پشتیبانی میکنند. اما از آنجایی که وبسرور Nginx برخلاف سایر سیستمعاملها که عملکرد توانمندی دارد، در پشتیبانی از سیستمعامل ویندوز قدرت کافی ندارد. بنابراین میوان گفت که در زمینه پشتیبانی از انواع سیستمعاملها، وبسرور Apache بهتر از Nginx عمل میکند.
پیکربندی توزیعشده/متمرکز وبسرورهای Apache و NGINX
پیکربندی وبسرورهای Apache و Nginx کاملا با یکدیگر متفاوت هستند، اما با این وجود نحوه پیکربندی هر کدام از آنها جذابیت خاص خود را دارد و هر دو به یک اندازه حائز اهمیت هستند.
وبسرور Apache
سبک معماری وبسرور Apache بهگونهای است که کاربران non-privileged را قادر میسازد بخشهای اصلی وبسایت خود را کنترل کنند؛ بدون آنکه اجازه ویرایش پیکربندی اصلی را به آنها بدهد.
وبسرور NGINX
اما وبسرور Nginx اجازه پیکربندیهای اضافی را به کاربر نمیدهد. اگرچه این سرور امکان پیکربندیهای اضافی را به شما نمیدهد، اما مزیت آن این است که عملکرد سرور را تا حد مطلوبی برای شما افزایش میدهد. علاوهبراین، عدم امکان پیکربندی مستقیم وبسرور Nginx باعث میشود که سرعت پاسخگویی این سرور به درخواستها سریعتر از Apache باشد. پیکربندی این سرور بهگونهای است که به جستجوی فایلهای .htaccess
و تفسیر درخواستهای کاربر نیازی ندارد.
برنده رقابت نحوه پیکربندی وبسرورها
همانطور که گفتیم، نحوه پیکربندی هر دو سرور اگرچه کاملا متفاوت است، اما هرکدام زیبایی و جذابیت خاص خود را دارد. اگر معیار شما سرعت باشد، وبسرور Nginx عملکرد قدرتمندتری دارد. اما اگر پیکربندی برای شما حائز اهمیت است، وبسرور Apache گزینه بهتری خواهد بود.
نحوه تفسیر درخواستها توسط Apache و NGINX
نحوه تفسیر درخواستها توسط Apache و Nginx یکی دیگر از ویژگیهای قابلتوجه این دو وبسرور است که باید به آن بپردازیم. نحوه پرازش و تفسیر درخواستها در دو وبسرور Apache و Nginx کاملا متفاوت است. این تفاوت هر یک از این وبسرورها را منحصر بهفرد میکند و البته برتریهایی را نیز برای هر کدام بههمراه دارد!
وبسرور Apache
وبسرور Apache قادر است که درخواستها را بهعنوان یک منبع فیزیکی در موقعیت فایل سیستم تفسیر کند. از این رو ممکن است به ارزشیابی انتزاعیتری نیاز داشته باشد. در واقع این سرور درخواستها را بهعنوان موقعیتهای فایل سیستم منتقل میکند. البته Apache از موقعیتهای URI نیز استفاده میکند، اما آنها عموما برای منابع انتزاعی بیشتر مورد استفاده قرار میگیرند. ازاینرو در زمان ایجاد یا پیکربندی یک میزبان (هاست) مجازی، وبسرور Apache از بلاکهای دایرکتوری در مسیر ریشه (root) فایل استفاده میکند. این اولویتبندی موقعیتهای فایل سیستم در مورد استفاده از فایلهای .htaccess
نیز مشاهده میشود که برای باطل کردن پیکربندیهای ویژه دایرکتوری بهکار گرفته میشود.
وبسرور NGINX
Nginx بهعنوان یک وبسرور و یک سرور پروکسی معکوس ایجاد شد. Nginx مکانیزمی برای تعیین پیکربندی دایرکتوری فایل سیستم ارائه نمیکند؛ در عوض URI آنها را منتقل میکند. در شرایطیکه درخواستها در عوض موقعیتهای فایل سیستم، بهعنوان URI منتقل میشوند، Nginx میتواند بهسادگی بهعنوان وبسرور و سرور پروکسی ایفای نقش کند. این وبسرور نحوه پاسخگویی به الگوهای درخواستی مختلف را با یک پیکربندی ساده پیادهسازی میکند. وبسرور Nginx تنها زمانی فایل سیستم را بررسی میکند که آماده سرویس دهی به درخواست باشد و به این دلیل است که وبسرور Nginx، نیازی به پیاده سازی هیچکدام از اشکال .htaccess
ندارد.
این طراحی برای نحوه تفسیر درخواستها بهعنوان موقعیتهای URI، وبسرور Nginx را قادر میسازد که نهتنها بهعنوان وبسرور، بلکه بهعنوان سرور پروکسی، متعادلکننده بار کاری و همچنین حافظه نهانوب HTTP عمل کند.
علاوهبراین، وبسرور Nginx از نظر نرخ انتقال دادهها (سرعت انتقال دادهها از سرور به مشتری) نیز برنده رقابت با وبسرور Apache است. در بیشتر موارد Nginx با مقدار عادلانه ۵۰۰/۱۰۰ وبسرور Apache را پشت سر میگذارد.
برنده رقابت نحوه تفسیر درخواستها
وبسرور Nginx بهدلیل سرعت بالاتر در تفسیر و پاسخگویی به درخواستها، عملکرد بهتری نسبت به Apache دارد.
ماژولار بودن وبسرورهای Apache و NGINX
هر دو وبسرور Apache و Nginx از طریق سیستمهای ماژولار قابلتوسعه هستند. اما نحوه عملکرد آنها متفاوت است. در این بخش ماژولهای قابلیت هر دو وبسرور Apache و Nginx را مقایسه میکنیم.
وبسرور Apache
وبسرور Apache با ارائه ۶۰ ماژول رسمی، دارای مجموعه قابلیتهای کاملی است که میتوانید آنها را نصب و فعال کنید. همچنین ماژولهای غیررسمی دیگری نیز وجود دارند که بهراحتی میتوانید در اینترنت آنها را جستجو کنید. سیستم مبتنی بر ماژول این سرور شما را قادر میسازد که برای رفع نیازهای خود، ماژولها را بهصورت داینامیک بارگذاری یا بارگیری کنید. این ماژولها قابلیت روشن و خاموش شدن دارند، که باعث میشوند یک عملکرد را در سرور اصلی اضافه یا حذف کنید. بهطور خلاصه، وبسرور Apache ماژولهای قابلیت متعددی دارد که بسیاری از نیازهای شما را پوشش میدهند؛ بااینحال اغلب تعداد زیادی از این ماژولها استفاده نمیشوند.
وبسرور NGINX
از سوی دیگر، پلاگینهای شخص ثالث وبسرور Nginx در هسته اصلی Nginx قرار میگیرند و نمیتوان بهصورت داینامیک، چیزی به آنها افزود. با این وجود، ماژولهای Nginx کاملا کاربردی هستند و به شما این امکان را میدهند که تنها با بهکارگیری عملکردی که قصد استفاده از آن را دارید، دستورهای خود را به سرور ارسال کنید.
بهنظر میرسد که Nginx بسیار امنتر از وبسرور Apache باشد، چرا که در این سرور اجزای قراردادی میتوانند به سرور متصل شوند.
علاوهبراین، Nginx بسیاری از قابلیتهای اصلی یک وبسرور را نیز ارائه میکند؛ بدون آنکه ویژگیهای مهمی مانند سبکبودن و عملکرد قدرتمند خود را که منجر به موفقیت این وبسرور شدهاند، قربانی کند.
در واقع میتوانیم وبسرور Apache را به نرمافزار Word مایکروسافت و وبسرور Nginx را به نرمافزار notepad تشبیه کنیم. چراکه Apache گزینهها و امکانات بسیاری دارد که تنها تعداد کمی از آنها موردنیاز شما خواهند بود. اما Nginx تنها همان امکانات و قابلیتهای معدودی را که مورد نیاز شما خواهند بود، با سرعتی ۵۰ برابر سریعتر از Apache در اختیار شما قرار میدهد.
برنده رقابت ماژولار بودن وبسرورها
از آنجایی که وبسرور Nginx تنها ویژگیها و امکانات موردنیاز شما را ارائه میکند و ویژگیهای اضافیتری در اختیار شما قرار نمیدهد، سبکتر، سریعتر و بسیار بهتر از وبسرور Apache عمل میکند. بنابراین در این مورد نیز باید وبسرور Nginx را برنده اعلام کنیم!
میزان انعطافپذیری وبسرورهای Apache و NGINX
میزان انعطافپذیری، یکی دیگر از ویژگیهای مهمی است که باید در انتخاب یک وبسرور، در نظر بگیریم. وبسرورهای Apache و Nginx از نظر میزان انعطافپذیری تفاوتهای جالبی دارند که در ادامه بررسی میکنیم.
وبسرور Apache
شما میتوانید وبسرور Apache را از طریق اجرای ماژولها، شخصیسازی کنید. این وبسرور از همان ابتدای کار از امکان بارگذاری داینامیک ماژولها پشتیبانی میکند. بنابراین میتوانیم این اطمینان را بدهیم که همهی ماژولهای Apache از این قابلیت پشتیبانی میکنند.
وبسرور NGINX
از ابتدای سال ۲۰۱۶، Nginx از قابلیت بارگذاری داینامیک ماژولها پشتیبانی میکند. نسخههای پیشین این وبسرور برای تفسیر ماژولها به باینری Nginx به ادمین نیاز داشتند.
با این وجود بسیاری از ماژولها هنوز به امکان بارگذاری داینامیک مجهز نشدهاند؛ اما انتظار میرود که در آینده از این امکان پشتیبانی کنند.
برنده رقابت میزان انعطافپذیری وبسرورها
واضح است که وبسرور Apache بهدلیل پشتیبانی از امکان بارگذاری داینامیک برای تمامی ماژولها، برنده رقابت با وبسرور Nginx از دیدگاه میزان انعطافپذیری است.
امنیت وبسرورهای Apache و NGINX
موضوع امنیت وبسرور، یکی دیگر از مباحث بحتبرانگیز و جالبی است که حتما باید پیش از انتخاب سرور به آن توجه کنیم. هر دو وبسرور Apache و Nginx که معماری پایه آنها با استفاده از زبان برنامهنویسی C پیادهسازی شده است، امنیتی توسعهیافته و بسیار مناسبی ارائه میدهند. بنابراین با استفاده از هر دو وبسرور خیالتان آسوده خواهد بود.
وبسرور Apache
وبسرور Apache به شما اطمینان میدهد که تمامی وبسایتهایی که بر روی این سرور اجرا میشوند، در برابر هکرها و انواع آسیبها و خطرها، ایمن خواهند بود. پنل مبتنی بر زبان برنامهنویسی C این سرور امنیت وبسایتهای اجرایی بر روی آن را تضمین میکند.
بنابراین این وبسرور برای مقابله با حملههای DDoS، امکانات و گزینههای پیکربندی ویژهای در نظر گرفته است. برای نمونه، ماژول mod_evasive برای پاسخگویی به حملههای HTTP DoS، DDoS یا حملههای بروت فورس (Brute Force) بهکار گرفته میشود.
وبسرور NGINX
کد پایه Nginx بهواسطه گسترهای از انواع دستورها، بهطرز قابلتوجهی کاهش یافته است که از دیدگاه امنیتی، یک امتیاز ویژه و آینده نگرانه برای nginx بهشمار میآید. این سرور همچنین بهتازگی فهرستی از پیشنهادهای امنیتی برای کاربران ارائه میدهد.
برنده رقابت امنیت وبسرورها
اگرچه هر دو وبسرور Apache و Nginx بهلطف معماری پایه مبتنی بر زبان برنامهنویسی C از وضعیت امنیتی خوبی برخوردار هستند و امکانات خوبی برای محافظت از وبسایتها در برابر انواع حملهها ارائه میکنند؛ اما بهنظر میرسد که Nginx بهدلیل کد بهینهتر و دیدگاه امنیتی متفاوت در این زمینه بهتر عمل کند.
وضعیت پشتیبانی بنیادهای نرمافزاری Apache و NGINX
پشتیبانی محصول یکی از ویژگیهایی است که برای همهی کاربران اهمیت بسیار بالایی دارد و میتواند در نتیجه تصمیمگیری آنها بسیار موثر باشد. در واقع پشتیبانی محصول عاملی است که تاثیر بسزایی در تجربه کاربری کاربران دارد. بههرحال وضعیت پشتیبانی وبسرورهای Apache و Nginx تفاوت چندانی نداشته و هر دو عملکرد قابلقبولی در این زمینه دارند.
وبسرور Apache
پشتیبانی غول تجاری Apache توسط شماری از شرکتهای شخص ثالث از جمله OpenLogic قابلدسترس است. اما بنیاد Apache لیست رسمی و معتبری در رابطه با شرکتهای پشتیبان ارائه نکرده است. بههرحال وبسرور Apache پشتیبانی و خدمات ثانویه بسیار مناسبی به تمامی کاربران خود ارائه میکند.
وبسرور NGINX
شرکت پشتیبان وبسرور Nginx یک محصول تجاری تحتعنوان Nginx Plus ارائه میکند که برای مجموعهای از ویژگیهای اضافی نظیر متعادلسازی بار کاری، رسانههای استریم و مانیتورینگ پشتیبانی مطلوبی ارائه میکند.
برنده رقابت وضعیت پشتیبانی وبسرورها
همانطور که گفتیم، وضعیت پشتیبانی و خدماتی هر دو وبسرور Apache و Nginx مشابه بود و هر دو عالی هستند.
در جدول زیر وبسرورهای Apache و Nginx بهطور خلاصه بررسی و مقایسه شدهاند؛
Apache | NGINX |
---|---|
بهعنوان یک وبسرور طراحی شده است. | هم بهعنوان وبسرور و هم بهعنوان سرور پروکسی معکوس عمل میکند. |
نمیتواند در ترافیک وب سنگین چندین درخواست را بهصورت همروند پردازش کند. | میتواند درخواستهای چندگانه کاربران را بهصورت همروند و با منابع محدود پردازش کند. |
از یک رویکرد Multi-Thread برای پردازش درخواستهای کاربران استفاده میکند. | برای سرویسدهی به درخواستهای کاربران از یک رویکرد مبتنی بر رویداد (event) استفاده میکند. |
ماژولهای بهصورت داینامیک بارگیری یا بارگذاری میشوند که باعث انعطافپذیری بیشتر آن میشود. | ماژولها بهصورت داینامیک بارگذاری نمیشوند. در واقع این ماژولها باید در هسته نرمافزار کامپایل شده باشند. |
محتوای داینامیک وبسرور را بهتنهایی مدیریت و کنترل میکند. | محتوای داینامیک بهصورت بومی قابل پردازش نیست. |
بررسی نهایی وبسرورهای Apache و NGINX
در حالت کلی شما نمیتوانید هیچکدام از وبسرورهای Apache و Nginx را بهعنوان جایگزینی برای دیگری در نظر بگیرید. چراکه هر یک نقاط قوت و ضعف مخصوص خودشان را دارند. در واقع شما باید پس از بررسی دقیق مزایا، محدودیتها و تفاوتهای دو وبسرور Apache و Nginx، تصمیم بگیرید که کدامیک برای شما مناسبتر است.
در این مطلب سعی کردیم که مهمترین و اصلیترین نکتههای وبسرورهای Apache و Nginx را بهصورت دقیق و با جزئیات بررسی کرده و با یکدیگر مقایسه کنیم. از میان ۹ موردی که بررسی کردیم، در ۵ حالت وبسرور Nginx برنده میدان بود و در ۲ مورد نیز هر دو وبسرور وضعیت مشابهی داشتند. بنابراین اگر بخواهیم در حالت کلی Apache و Nginx را مقایسه کنیم، Nginx وبسرور Apache را پشت سر میگذارد.
با این وجود، باز هم ممکن است پس از بررسی موارد گفتهشده، همچنان در تصمیمگیری برای انتخاب Apache یا Nginx مردد باشید. پس توصیه میکنیم که ادامه مطلب را مطالعه کنید.
چه زمانی باید NGINX را بهجای Apache انتخاب کنیم؟
در دو حالت بهتر است که وبسرور Nginx را بهجای Apache انتخاب کنیم:
الف) برای پردازش سریع محتوای استاتیک
وبسرور Nginx برای پردازش و مدیریت فایلهای استاتیک از یک مسیر مشخص، عملکرد بسیار بهتری دارد. علاوهبر این، این سرور درخواستهای محتوای استاتیک را بهصورت همروند پردازش کند؛ بنابراین بهدنبال درخواستهای سنگین و چندگانه محتوای استاتیک، پردازشهای سرور بالا دست شبکه مسدود نمیشوند. این قابلیت بهطرز چشمگیری عملکرد سرورهای بکاند را بهبود میبخشد.
وبسرور Nginx پیوسته در تلاش است که تجربه بهتری را برای کاربران خود فراهم کند و در سال ۲۰۱۸ نیز رشد قابلتوجهی داشته است.
ب) برای وبسایتهای با ترافیک بالا
اگر بخواهیم به سرعت و تعداد کاربرانی که میتوانند در بار ترافیک بالا سرویسدهی شوند، بپردازیم؛ وبسرور Nginx برنده میدان خواهد بود. این قابلیت وبسرور Nginx را به یک گزینه سَبُکوزن و عالی برای منابع سرور تبدیل میکند. بههمین دلیل است که برخی از توسعهدهندگان وب Nginx را به Apache ترجیح میدهند.
بهویژه، این روزها نیز فروشگاههای اینترنتی نیز بهدنبال استخدام توسعهدهندگان پلتفرم مجنتو (Magento) هستند که در رابطه با وبسرور Nginx دانش بالایی داشته و طرز کار با وبسایتهای با ترافیک بالا را نیز بلد باشند.
بهطور خلاصه، زمانیکه صحبت از وبسایتهایی با ترافیک بالا میشود، هیچ سروری نمیتواند Nginx را شکست بدهد.
استفاده از هر دو وبسرور NGINX و Apache در کنار هم
شما میتوانید از با بهکارگیری هر دو وبسرور Nginx و Apache در کنار یکدیگر، از قدرتمندی و تواناییهای هر دو سرور بهره ببرید. همانطور که در شکل زیر مشاهده میکنید، شما میتوانید از Nginx بهعنوان سرور پروکسی در جلوی وبسرور Apache استفاده کنید. با این کار میتوانید بهصورت همزمان از هر دو مزیت برقراری شمار بالای اتصالات و سرعت بالای پردازش وبسرور Nginx بهرهمند شوید.
Nginx در اتصالات استاتیک، بهسرعت فایلها را در اختیار کاربران قرار میدهد. برای محتوای داینامیک، مانند فایلهای Php، سرور پروکسی معکوس Nginx درخواستهای کاربران را به Apache ارائه میکند که میتواند نتایج این درخواستها را پردازش کرده و صفحههای ارائهشده آنها را بازگرداند.
پس از آن وبسرور NGINX محتوای نهایی را به مشتری منتقل میکند. همچنین این کار شما را قادر میسازد یک وبسرور بسیار کاربردی داشته باشید که میتواند به تعداد زیادی از کاربران با سرعت بالا خدماترسانی کند.
سخن پایانی
همانطور که اشاره کردیم، تصمیمگیری برای انتخاب وبسروری که قصد دارید استفاده کنید، یک گام بسیار مهم برای راهاندازی وبسایت شما محسوب میشود. هر دو وبسرور Nginx و Apache میتوانند انواع بارهای کاری را پردازش کرده و با همکاری با سایر نرمافزارها، یک سرور و web stack کامل ارائه کنند.
برای تصمیمگیری در انتخاب یکی از وبسرورها، لازم است که مباحثی از جمله محدودیتها، نقاط ضعف و قوت، عملکرد، سرعت، پشتیبانی از سیستمعاملها، خدمات ثانویه، امنیت، میزان انعطافپذیری سرور، امکانات و ماژولهای قابلیت و سایر نکتههای ضروری را بهصورت تخصصی بررسی کنید تا بتوانید متناسب با نیازهای خود، بهترین انتخاب را داشته باشید.