مقایسه Nginx و Apache می تواند برای افراد زیادی جذابیت داشته باشد. اینترنت به شکلی که امروز میشناسید، در دهه 1990 به سرعت گسترش یافت. این امر به لطف پروتکل «وب» امکانپذیر شد که به موجب آن بازدیدکنندگان میتوانند از یک رایانه دیگر درخواست فایل های HTML کنند. سپس این فایل ها توسط رایانه سرویسدهنده که صفحه وب را میزبانی میکند، به بازدیدکنندگان ارائه میشوند.
صفحات وب اساساً فایل های HTML هستند. برای اینکه ماشین سرویسدهنده بتواند صفحات وب مختلف را به بازدیدکنندگان ارائه دهد، به یک برنامه در سمت سرور نیاز دارد. نرمافزارهایی مانند انجین ایکس و آپاچی درخواستها را مدیریت و تجزیه و تحلیل کرده و سپس فایل های مربوطه را برای نمایش در مرورگر بازدیدکننده ارسال میکنند.
مقایسه Nginx و Apache
انجین ایکس و آپاچی وب سرورهای محبوبی هستند که برای ارائه صفحات وب به مرورگر کاربر استفاده می شوند. خلاصه ای از چند آمار جهت مقایسه Nginx و Apache، در لیست زیر آمده است:
- آپاچی ابتدا در سال 1995 و سپس Nginx در سال 2004 منتشر شد.
- هر دو توسط 500 شرکت برتر در سراسر جهان استفاده می شوند.
- سهم بازار Nginx به طور پیوسته در حال رشد بوده است.
- در برخی موارد، Nginx از نظر عملکرد دارای مزیت رقابتی می باشد.
Apache
تصویر(1)
Apache اولین وب سروری بود که پس از انتشار، سریعا به محبوبترین وب سرور جهان تبدیل شد. امروزه نیز Apache در همان جایگاه قرار دارد اما بیشتر به دلیل قدمت آن است. آپاچی توسط Apache Foundation تحت مجوز Apache توسعه یافته و نگهداری میشود.
دو داستان در مورد نحوه نام گذاری Apache وجود دارد. یک داستان میگوید که نام این وب سرور از قبیله سرخپوستان آپاچی گرفته شده است. داستان دیگر، نام Apache را نوعی بازی با کلمات می داند که برگرفته از "Patchy server" می باشد و به دنبال مجموعه از پچهای نرمافزاری انتخاب شد.
لینوکس
سهم بازار بزرگ آپاچی تا حدی به این دلیل است که در تمام توزیعهای اصلی لینوکس، مانند Red Hat/Centos و Ubuntu به صورت پیشفرض نصب می باشد.
تصویر(2)
یکی از نشانه های نقش مهم آپاچی در دنیای لینوکس این است که نام فرآیند سرور آن HTTPd می باشد. برخی از دلایل گسترش آپاچی، سیستم پیکربندی و فایل htaccess آن است.
htaccess.
آپاچی از htaccess. برای پیکربندی خود استفاده می کند. آموزش های زیادی در مورد نحوه پیکربندی، ویرایش و کار با این فایل وجود دارد زیرا انعطاف پذیری زیادی در پیکربندی نحوه رسیدگی آپاچی به درخواست های دریافتی ارائه می دهد. قوانین ریدایرکت مختلف، حداکثر اندازه فایل آپلودی، بازنویسی URL، محدودیتهای حافظه، حفاظت از دایرکتوری (htpasswd)، هدرهای منقضی، هدرهای کنترل حافظه پنهان، هدرهای رمزگذاری، کوکیها و دستکاری رشتههای جستجو برخی از این قوانین هستند.
در مقایسه Nginx و Apache، یکی از مزایای اصلی آپاچی این است که روت سرور، دایرکتوری اصلی وب سایت یا هر دایرکتوری دیگری می تواند فایل htaccess. را با پیکربندی خاص خود داشته باشد.
برای ارائه دهندگان هاست اشتراکی، این مزیت فوق العاده است زیرا می توانند برای هر هاست، پیکربندی و نحوه سرویس دهی خاصی ارائه دهند، بدون اینکه روی دیگر هاست ها تأثیر بگذارند. مشتریان می توانند بسیاری از جزئیات را در یک محیط میزبانی مشترک محدود پیکربندی کنند، در حالی که هرگز به پیکربندی اصلی سرور دسترسی نخواهند داشت.
به طور کلی، شما فقط زمانی باید از فایل های htaccess. استفاده کنید که به فایل پیکربندی سرور اصلی دسترسی ندارید.
تاثیر htaccess. در عملکرد وب سرور
htaccess. یک فایل متنی است که میتوانید در سرور خود قرار دهید تا تنظیمات خاصی را پیکربندی نمایید. این فایل میتواند برای انجام کارهایی مانند ریدایرکت URL ها، تغییر سطح دسترسی فایل ها و فعال کردن ویژگی های امنیتی استفاده شود.
با این حال، استفاده از htaccess. ها میتواند بر عملکرد وب سرور شما تأثیر بگذارد. هر بار که یک درخواست به یک URL یا فایلی که دارای htaccess. است ارسال میشود، Apache باید کل درخت دایرکتوری را از URL یا فایل درخواست شده تا روت سرور بررسی کند و سپس آنها را لود نماید. در ادامه Apache باید این فایل ها را پردازش کند و خود را برای هر یک از دایرکتوری هایی که به این ترتیب هستند، مجدداً پیکربندی نماید.
در مورد وب سایت های وردپرس، این مسئله میتواند بسیار پیچیده شود. یک وب سایت وردپرس معمولی میتواند صدها درخواست از دایرکتوری های مختلف داشته باشد.
برای مثال، یک وب سایت وردپرس معمولی ممکن است چندین درخواست از دایرکتوری های /wp-content/uploads/yyyy/mm داشته باشد که اغلب از دایرکتوری های ماه های مختلف هستند. منابع استاتیک نیز از مسیر /wp-content/themes/parent-theme و /wp-content/themes/child-theme فراخوانی می شوند که شامل فایل های جاوا اسکریپت، CSS و تصاویر میباشند. برای هر یک از این منابع، Apache باید کل درخت دایرکتوری را بررسی کند تا به دنبال پیکربندی مورد نظر باشد.
تحلیل ها نشان می دهد یک پیکربندی وردپرس معمولی که برای وب سایت های میزبانی اشتراکی بسیار رایج است، می تواند شامل 42 اجرای جداگانه و 249 جستجو برای فایل htaccess. باشد.
در نتیجه، استفاده از htaccess. ها میتواند باعث کندی وب سایت شما شود. اگر میتوانید از htaccess. ها اجتناب کنید، این کار را انجام دهید. اگر استفاده از htaccess. ها الزامی است، سعی نمایید تعداد آنها را به حداقل برسانید و فقط در موارد ضروری از آنها بهره ببرید.
ماژول ها
در مقایسه Nginx و Apache یکی دیگر از مواردی که باعث محبوبیت آپاچی شد، سیستم ماژول پویا (dynamic module system) آن است.
ماژول ها در انجین ایکس و آپاچی به کاربران اجازه می دهند تا عملکرد وب سرور را گسترش دهند. آپاچی به کاربران کمک می کند که ماژول ها را پس از راه اندازی وب سرور نصب کنند و سپس در صورت نیاز آنها را فعال یا غیرفعال نمایند. توزیعهای مبتنی بر دبیان دستوراتی دارند که امکان فعال و غیرفعال کردن این ماژولها را بدون نیاز به ویرایش فایلهای پیکربندی فراهم میکنند. این دستورات a2enmod و a2dismod هستند.
Nginx
Nginx، در سال 2004 وارد صحنه شد، زمانی که برای اولین بار توسط توسعه دهنده روسی ایگور سیسوف به صورت عمومی منتشر گردید. Owen Garrett، مدیر پروژه Nginx بیان داشته که Nginx به طور خاص برای رفع محدودیت های عملکردی وب سرورهای آپاچی نوشته شده است. Nginx اولین بار در سال 2002 به عنوان یک ابزار مقیاس پذیر برای وبسایت rambler.ru ایجاد شد. این وبسرور در دو نسخه منتشر گردیده است:
- نسخه متنباز با مجوز BSD
- نسخه Nginx Plus با پشتیبانی و ویژگیهای اضافی سازمانی.
پس از انتشار، Nginx عمدتاً برای ارائه فایلهای استاتیک و به عنوان یک load-balancer (متعادل کننده بار) پیش از لود Apache استفاده میشد. با پیشرفت وب و نیاز به استفاده کارآمد از سختافزار، وبسایتهای بیشتری پس از مقایسه Nginx و Apache، وب سرور Nginx را به طور کامل جایگزین Apache کردند. این امر تا حدی به دلیل نرمافزار کامل تر Nginx بود.
در مارس 2019، Nginx Inc توسط شرکت F5 Networks به مبلغ 670 میلیون دلار خریداری شد. بر اساس گزارش Techcrunch، در آن زمان سرور Nginx بیش از 375 میلیون وب سایت با حدود 1500 مشتری را تامین می کرد. بر اساس دادههای w3techs، سهم بازار Nginx به طور پیوسته در حال رشد بوده و آپاچی را از جایگاه اول خارج کرده است. در جدول زیر مقایسه Nginx و Apache را می توانید مشاهده کنید:
تصویر(3)
این داده ها مربوط به کل وب سرورهای جهانی است اما برای مثال اگر یک میلیون وب سایت برتر در نظر گرفته شود، Nginx درصد بیشتری از وب سایت ها را به خود اختصاص می دهد:
تصویر(4)
به نظر می رسد Google Search Trends نیز این واقعیت را منعکس می کند:
تصویر(5)
مقایسه Nginx و Apache از سمت Netcraft نشان داد که Nginx در آوریل 2019 برای اولین بار از آپاچی پیشی گرفته است.
پیکربندی Nginx
Nginx برخلاف وب سرور Apache، سیستم پیکربندی ندارد. به همین دلیل، علیرغم کارآمدتر و سریعتر بودن، Nginx به طور گسترده توسط ارائه دهندگان میزبانی هاست در مقیاس کوچک استفاده نمی شود. همچنین Nginx در محیط های اشتراکی به خوبی وب سرور Apache عمل نمی کند.
ماژول های Nginx
سیستم ماژول های Nginx یکی دیگر از مواردی است که به آن برتری می دهد. ماژولهای Nginx معمولاً باید در زمان نصب فعال شوند و به مهارت فنی بیشتری نیاز دارند. اضافه کردن ماژولها پس از نصب کمی پیچیدهتر است. در سال 2016، با نسخه 1.9.11، همه چیز تغییر کرد و مخزن رسمی ماژول های پویا برای کاربران پریمیوم ارائه شد. از ماه می 2019، توسعه و پشتیبانی از QUIC و HTTP/3 را نیز اعلام کردند.
سیستم کش: مقایسه Nginx و Apache
اگر بخواهید مکانیزم کش را به صورت ساده تعریف کنید، میتوانید آن را آمادهسازی محتوا برای بازدیدکنندگان وب سایت قبل از بازدید آنها تصور نمایید، به طوری که وقتی آنها محتوا را درخواست می کنند، نیازی نیست به دنبال محتوای درخواست شده باشید. با توجه به اینکه قبلاً آن را آماده کردهاید و بدون هیچ انتظاری آن را به بازدیدکنندگان سایت تحویل میدهید.
مانند وب سرور Apache، پیکربندی معمول Nginx این بود که بین سرورها و کاربر نهایی قرار گیرد تا حجم درخواست ها را روی سایر زیرساخت ها کاهش دهد. در این حالت، میتواند محتوای استاتیک را بدون نیاز به بازیابی آن از سرور مبدا، کش کند. اگر از Nginx به عنوان یک وب سرور مستقل استفاده کنید، نیازی به این کار نیست. Nginx به تنهایی در ارائه محتوای استاتیک بسیار کارآمد است.
سپس موضوع کش پویا یا کش صفحه مطرح میشود. در یک وبسایت وردپرسی، این بدان معنا است که همه صفحات وردپرس که برای هر URL ایجاد میشوند، در حافظه یا روی دیسک ذخیره میشوند. کشینگ FastCGI بهطور پیشفرض درون یک Nginx استاندارد در دسترس است. این یک ویژگی بسیار ساده، قدرتمند و یکی از ویژگیهای کمتر استفادهشده در Nginx می باشد.
جهت مقایسه Nginx و Apache، باید بدانید که Apache یک ماژول به نام mod_cache دارد که برای ذخیرهسازی استفاده میشود اما بر اساس گزارش های منتشر شده این ماژول دارای باگ بوده و میتواند با سایر ماژولها تداخل داشته باشد. بنابراین، روش ذخیرهسازی استانداردی که با وب سرور Apache پیادهسازی میشود، شتابدهنده HTTP Varnish است. Varnish یک سیستم کش اختصاصی می باشد که به دلیل عملکرد و قابلیت اطمینانش شناخته می شود.
با این حال، برخی از آزمایشات اخیر نشان داده است که کشینگ Nginx برتری واضحی نسبت به Varnish دارد. Nginx یک وب سرور جدیدتر بوده که برای عملکرد بهتر طراحی شده است.
رسیدگی به درخواست ها: مقایسه Nginx و Apache
بزرگترین مقایسه Nginx و Apache در معماری زیربنایی، نحوه رسیدگی به درخواست ها است.
آپاچی درخواستها را با MPM-s یا Multi-Processing-Modules پردازش میکند که مسئول اتصال به پورتهای شبکه در دستگاه، پذیرش و رسیدگی به درخواستها است.
قدیمیترین MPM که به ابتدای آغاز کار آپاچی برمیگردد، ماژول prefork است. این ماژول به تنهایی می تواند دلیلی بر بدنامی و عملکرد Apache باشد. در این حالت، آپاچی هر فرآیند جدید را در یک رشته جداگانه قرار می دهد.
این ماژول، که با mod_php استفاده میشد، به این معنی بود که سرور Apache در هر فرآیند یک مفسر PHP را به کار می گرفت، حتی اگر باید فایلهای CSS یا تصاویر را ارائه میداد. این رویه ناکارآمد بود. Prefork همراه با وب سرور Apache به عنوان ماژول پیشفرض ارائه می شود. همچنین، اتصالات را به HTTP/1 محدود میکند.
در سالهای بعد، Apache ماژولهای چندرشتهای Worker MPM و پس از آن ماژول Event MPM را توسعه داد. هر دوی این ماژولها بسیاری از مشکلات عملکرد Apache را برطرف میکردند.
Nginx از معماری رویدادمحور non-blocking استفاده میکند اما در دنیای لینوکس یا یونیکس، فرآیندها، برنامههای در حال اجرا هستند.
رشتهها زیرمجموعهای از فرآیندها هستند و چندین رشته میتواند در یک فرآیند اجرا شود. این قابلیت را میتوان به عنوان چندین تب در یک پنجره مرورگر تصور کرد. به این ترتیب، یک برنامه میتواند از چندین پردازنده و پردازندههای چند هستهای و چند رشتهای برای اجرای سریعتر استفاده کند.
Apache برای هر اتصال یک فرآیند ایجاد میکند. این میتواند برای وبسایتهای با ترافیک بالا ناکارآمد باشد، زیرا ایجاد فرآیندهای جدید زمانبر است.
برای مقایسه Nginx و Apache، میتوانید ایجاد فرآیند جدید را مانند بوت شدن کامپیوتر یا راهاندازی برنامهها تصور کنید. حتی در سریعترین کامپیوترها، باز هم مدتی طول میکشد. با وبسایتهای امروزی که صدها درخواست را هنگام لود صفحه اجرا می کنند، زمان بارگذاری سایت بسیار طولانی خواهد شد.
به همین دلیل است که Apache برای وبسایتهای با ترافیک بالا مناسب نیست. اگر وبسایت شما صدها درخواست در دقیقه دریافت میکند، Apache باید صدها فرآیند جدید ایجاد نماید. این کار به منابع زیادی نیاز خواهد داشت و می تواند باعث کند شدن وبسایت شما شود.
Nginx یک وبسرور متفاوت می باشد که برای وبسایتهای با ترافیک بالا بهینهسازی شده است. Nginx از یک فرآیند برای همه اتصالات استفاده میکند. این کار باعث میشود Nginx کارآمدتر از Apache باشد و بتواند ترافیک بیشتری را مدیریت نماید.
اگر بخواهید نوع وب سروری یک سایت استفاده می کند را تشخیص دهید، معمولاً می توانید آن را در HTTP response headers بیابید. این بدان معنی است که باید روی وب سایت موردنظر کلیک راست کنید، Inspect را انتخاب نمایید. در بین ابزارهای موجود، تب Network را باز کرده و سپس وب سایت را مجددا بارگذاری کنید. تمام منابعی که وب سایت در حال لود است را می توانید از این طریق مشاهده نمایید. اگر منبعی خاص و تب Headers آن را انتخاب کنید، معمولاً اطلاعات سرور مشخص خواهد بود. اگر وبسایت از CDN یا شتابدهنده HTTP استفاده میکند، ممکن است چیزی شبیه Cloudflare یا Varnish در خط server نمایش داده شود.
مثال زیر از یک وب سایت وردپرسی است که هاست اشتراکی معمولی به همراه cPanel، Apache و PHP استفاده می کند:
تصویر(7)
نمونه زیر یک وب سایت با وب سرور Nginx است:
تصویر(8)
سخن پایانی
در این مقاله، مقایسه Nginx و Apache انجام و تفاوتهای اصلی معماری آنها توضیح داده شد. هر کدام از وب سرور ها دارای ویژگی های خاصی هستند که می توانند برای سایت ها مفید واقع شوند البته همه ویژگی ها اولویت یکسانی ندارند و آپاچی یا ابزارهای دیگری مانند Lighttpd، IIS، LiteSpeed، Caddy می توانند راه حل های خوبی باشند.