وب سرور، سرویسی است که از HTTP (پروتکل انتقال ابرمتن) و سایر پروتکل ها برای پاسخ به درخواست های مشتری که از طریق وب انجام میشود استفاده میکند. وظیفه اصلی یک وب سرور نمایش محتوای وب سایت از طریق ذخیره سازی، پردازش و تحویل صفحات وب به کاربران است. وب سرور بر روی سرور های ویندوزی و لینوکسی قابل نصب میباشد.
از رایج ترین وب سرورهای لینوکسی که طرفداران زیادی دارند میتوان به Apache و NGINX اشاره کرد، در ادامه با هم بررسی خواهیم کرد که تفاوت وب سرور Apache و NGINX در چیست؟ سریعترین وب سرور کدام است ؟ مزایا و محدودیت کلیدی آنها چیست؟ کدام یک برای شما مناسب تر است؟
تفاوت وب سرور Apache و Nginx
[highlight color=”blue”]تفاوت اصلی بین Apache و NGINX در معماری طراحی آنها نهفته است. آپاچی از یک رویکرد فرآیند محور استفاده می کند و برای هر درخواست یک thread جدید ایجاد می کند. در حالی که NGINX از معماری رویداد محور برای رسیدگی به درخواست های متعدد در یک thread استفاده می کند.[/highlight]
Apache HTTP Server چیست ؟
سرور آپاچی، یک وب سرور چند پلتفرمی منبع باز است که به نام “httpd” و Apache شناخته میشود. سرور آپاچی توسط تیم Berners Lee توسعه داده شده است و در سال 1995 منتشر شد. اپاچی به سرعت طرفداران زیادی پیدا کرد و در حال حاضر توسط بنیاد آپاچی حمایت میشود.
آپاچی توسط تعداد زیادی توسعه دهنده تحت ASF توسعه یافته و نگهداری میشود، این وب سرور اکثرا بر روی لینوکس اجرا میشود و حدودا 46% از کل وب سایت ها در کل جهان از وب سرور آپاچی استفاده میکنند.
وب سرور NGINX چیست؟
وب سرور NGINX در سال 2004 توسط L gor Sysoev منتشر شد و امروزه آنرا میتوان بیشتر از یک وب سرور دانست، Nginx در حال حاضر محبوبیت بیشتری نسبت به آپاچی دارد.
در ابتدا از Nginx بیشتر به عنوان مکمل Apache استفاده میشد، اما امروزه به عنوان یک وب سرور که طیف کاملی از وظایف را برعهده دارد تکمیل شده است. از Nginx میتوان به عنوان پروکسی معکوس، load balancer، پروکسی ایمیل و HTTP caching استفاده کرد.
Apache و Nginx از ویژگی های زیادی برخوردار هستند که در بسیاری از زمینه ها متفاوت عمل میکنند اما هر کدام به شیوه خود برتری هایی دارند در ادامه این دو وب سرور را باهم مقایسه میکنیم.
معماری پایه
وقتی صحبت از مقایسه آپاچی و Nginx میشود، تفاوت اصلی آنها را میتوان در طراحی معماری آنها دانست، این بدان معنی است که نحوه مدیریت اتصالات، ترافیک و پاسخ به شرایط مختلف ترافیک متفاوت است. آپاچی شامل یک رویکرد فرآیند محور است و Nginx از معماری رویداد محور پیروی میکند.
[author title=”آپاچی” image=”http://”]رویکرد مبتنی بر فرآیند.
برای هر درخواست یک موضوع جدید ایجاد می کند.[/author]
آپاچی ماژول های مختلف پردازشی را ارائه میدهد و از رویکرد چند رشتهای پیروی میکند، این ماژول ها از سه نوع الگوریتم رسیدگی به درخواست ها استفاده میکنند که هر کدام برای نیاز های مختلف سرور در نظر گرفته شده است.
MPMs (Multi-Processing Modules) : یک معماری انعطافپذیر که برای انتخاب اتصالات مختلف و الگوریتمهای مختلف مدیریت، ارائه میشود. سه MPM اصلی آپاچی عبارتند از:
- Process (Pre-fork) MPM به مجموعهای از فرآیند ها پاسخ میدهد، در یک زمان به یک درخواست پاسخ میدهد. به عبارت دیگر آپاچی هربار یک thread جدید برای رسیدگی به درخواست اتصال ایجاد میکند.
- Worker MPM
- Event MPM
آپاچی نسخه 2.2 از mpm_worker, mpm_prefork و mod_php استفاده میکند اما آپاچی نسخه 2.4 برای mpm_event, php-fpm پیکربندی شده است.
Thread:کوچکترین دنبالهای از دستورالعمل های برنامه ریزی شده است که میتواند به طور مستقل توسط یک زمانبندی مدیریت شود، در بیشتر موارد یک Thread جز یک فرآیند است.
در کل معماری پایه آپاچی به گونهای است که به دلیل مصرف منابع سنگین میشود، در نتیجه ممکن است باعث ایجاد سرعت پایین در سرور شود.
[author title=”NGINX” image=”http://”]رویکرد رویداد محور.
چندین درخواست را در یک رشته مدیریت می کند.[/author]
Nginx از معماری رویداد محور استفاده میکند و به درخواست ها به صورت غیر همزمان پاسخ میدهد. برای استفاده از الگوریتم مدیریت، اتصال رویداد محور non-blocking طراحی شده است، بنابراین میتواند هزاران اتصال (درخواست) در یک رشته پردازشی انجام دهد. ماژول فرایند اتصال به Nginx اجازه میدهد تا با استفاده از منابع محدود بسیار سریع و گسترده کارکند، بنابراین یک گزینه مناسب در سیستم هایی است که تحت بارهای سنگین کار میکنند.
نتیجه :
NGINX ساختار سبک وزن و معماری بسیار سریع نسبت به آپاچی دارد.
کارایی
وب سرور های آپاچی و Nginx محتوای static و dynamic را متفاوت پردازش میکنند اما Nginx در مورد پردازش محتوای static بهتر عمل میکند.
عملکرد آپاچی در محتوای Static
آپاچی محتوای ثابت را با استفاده از روش مبتنی بر فایل ارائه میدهد، محتوا یا فایل های Static معمولا فایل هایی هستند که روی دیسک رایانه سرور ذخیره میشوند، برای مثال: فایل های CSS، فایل های جاوا اسکریپت یا تصاویر. آپاچی با استفاده از روش مبتنی بر فایل، محتوای Static را مدیریت میکند.
عملکرد NGINX در محتوای Static
هنگامی که صحبت از محتوای ثابت میشود Nginx عملکرد بهتری دارد، از آنجایی که معماری Nginx برای حجم زیاد کاری بهتر عمل میکند در ارائه محتوای ثابت بسیار سریعتر عمل میکند. طبق تست معیاری که تا 1000 اتصال همزمان انجام میشود، nginx تا 2.5 برابر سریعتر از Apache عمل میکند. در تصویر زیر به وضوح سرعت NGINX نسبت به آپاچی را میتوانید مقایسه کنید.
عملکرد آپاچی در محتوای dynamic
محتوای پویا را سرور پردازش میکند، آپاچی میتواند بدون اتکا به اجزای خارجی پردازش را در خود وب سرور انجام دهد، عملکرد Apache در مقابل Nginx در مورد پردازش محتوای پویا را تقریبا میتوان برابر دانست.
عملکرد NGINX در محتوای dynamic
Nginx نمیتواند محتوای پویا را در وب سرور همانطور که آپاچی انجام می دهد پردازش کند، تمام درخواستهایی که دارای محتوای صفحه وب پویا هستند برای اجرا به یک فرآیند خارجی (مثلاً PHP-FPM) منتقل میشوند. Nginx منتظر میماند تا محتوای نهایی بازگردد و آن را به client تحویل دهد. در تصویر زیر این فرایند به طور واضح مشخص شده است.
NGINX میتواند محتوای پویا را در صورت استفاده با کنترلرهای SCGI و ماژول FastCGI ارائه دهد.
نتیجه:
در ارائه محتوای استاتیک، Nginx از Apache بهتر عمل میکند.
در پردازش محتوای پویا هر دو عالی عمل میکنند.
پشتیبانی از سیستم عامل ها
اینکه یک وب سرور از چه سیستم عامل هایی پشتیبانی میکند نکته مهمی است که باید در نظر گرفت، عملکرد NGINX و APACHE در این مورد تقریبا مشابه است.
آپاچی : از تمام سیستم عاملهای مشابه یونیکس از جمله لینوکس و BSD پشتیبانی میکند و به طور کامل از MS-Windows پشتیبانی میکند
NGINX : تقریبا از تمامی سیستم عامل های مشابه یونیکس پشتیبانی میکند همچنین از ویندوز پشتیبانی می کند اما عملکرد ویندوز آن به اندازه سایر پلتفرم ها قوی نیست.
نتیجه :
آپاچی در مورد پشتیبانی از سیستم عامل ها بهتر عمل میکند.
پیکربندی
Apache و Nginx به خوبی پیکربندی شدهاند، پیکربندی این وبسرور ها آنها را با یک دیگر متفاوت کرده است، در ادامه با هم بررسی میکنیم پیکربندی کدام یک ساده تر و سریع تر است.
آپاچی : این امکان را فراهم میکند تا پیکربندی بر اساس هر دایرکتوری از طریق فایل htaccess. صورت گیرد، این معماری به کاربران غیر مجاز اجازه میدهد تا وب سایت را بدون نیاز به مجوز، ویرایش و پیکر بندی اصلی را کنترل کنند.
NGINX : اجازه پیکربندی اضافه را نمیدهد و باعث افزایش کارایی میشود. با اجازه ندادن به پیکربندی دایرکتوری، میتواند درخواست را سریع تر از آپاچی ارائه دهد زیرا نیازی به جستجوی فایل های htaccess. و تفسیر درخواست ایجاد شده توسط کاربر نیست.
نتیجه:
اگر بحث پیکربندی باشد آپاچی بهتر عمل میکند، اما اگر سرعت را در نظر بگیریم Nginx بهتر عمل میکند.
درخواست تفسیر
روش تفسیر درخواست ها موضوع جالبی برای مقایسه است، Apache و Nginx هر کدام درخواست ها را به شیوهای کاملا متفاوت پردازش و تفسیر میکنند و این روش های متفاوت هر کدام از این وب سرورها را منحصر به فرد کرده است. باهم روش های درخواست تفسیر را بررسی خواهیم کرد.
آپاچی :درخواست ها را با توجه به file system location از آدرس فیزیکی در سرور تفسیر میکند.
NGINX :
URI را برای تفسیر درخواست ها ارسال می کند، Nginx برای اینکه هم یک وب سرور و هم یک سرور پراکسی معکوس باشد ایجاد شده است. ارسال درخواستها به URI بهجای file system location به Nginx اجازه میدهد به راحتی هم در وب و هم در سرور پراکسی کار کند و با توجه به نحوه پاسخگویی به الگوهای درخواست های مختلف به سادگی پیکربندی میشود.
نتیجه:
nginx به دلیل تفسیر و پاسخ سریعتر در این بخش بهتر عمل میکند.
ماژول ها
Apache و Nginx هر دو از طریق ماژول قابل ارتقا هستند اما نحوه کار آنها متفاوت است. در این بخش ماژول های هر دو وب سرور را بررسی خواهیم کرد.
آپاچی : 60 ماژول رسمی با قابلیت بارگذاری dynamically که میتوان آنها را خاموش یا روشن کرد. وب سرور Apache از امکانات فراوانی پشتیبانی میکند که با نصب یکی از این ماژول ها میتوان آنها را فعال کرد.
NGINX : ماژول های اصلی به صورت dynamic قابل بارگیری نیستند، اما ماژول های مفیدی دارد که به شما این امکان را میدهد آنچه که از سرور خود میخواهید در اختیارتان قرار دهد.
برای درک بهتر ماژول ها Apache و Nginx به مثال توجه کنید : اگر آپاچی را مانند مایکروسافت Word در نظر گرفت و Nginx را مانند یک Notepad، آپاچی میلیون ها گزینه دارد اما شما فقط به چند مورد نیاز دارید، Nginx فقط چند کار را انجام میدهد اما انها را 50 برابر سریعتر از آپاچی انجام میدهد.
نتیجه:
Nginx با ماژول های کمتر باعث شده وب سرور سبک تر، هوشمند تر و بهتری نسبت به آپاچی باشد.
انعطاف پذیری
یکی از نکات مهمی که در مورد وب سرور ها باید در نظر گرفت انعطاف پذیری آنهاست، در ادامه به این بحث خواهیم پرداخت:
آپاچی : پشتیبانی از سفارشی سازی وب سرور از طریق ماژول های dynamic.
NGINX : برای پشتیبانی از ماژول های dynamic و بارگذاری به اندازه کافی انعطاف پذیر نیست.
نتیجه :
آپاچی انعطاف پذیری بیشتری دارد.
امنیت
وب سرور های Apache و Nginx هر دو امنیت گستردهای را بر پایه زبان مبتنی بر C ارائه میدهند.
آپاچی : از امنیت عالی برخوردار است و اطمینان حاصل میکند که تمام وب سایت هایی که روی سرور اجرا میشوند از هر گونه آسیب و هکر ایمن هستند و همچنین ماژول mod_evasive را برای پاسخ به حملات HTTP DoS، DDoS یا brute force ارائه میدهد.
NGINX : دیتابیس NGINX به طور قابل توجهی نسبت به آپاچی کوچکتر است، بنابراین از نظر امنیتی یک امتیاز مثبت محسوب میشود.
نتیجه:
NGINX را میتوان امن تر دانست.
نتیجه
Apache و Nginx را نمیتوان جایگزین کرد، هرکدام نقاط قوت و ضعف خود را دارند. پس از بررسی مزایا، محدودیت ها و تفاوت های وب سرور های Apache و Nginx میتوانید انتخاب کنید کدام وب سرور برای شما عملکرد بهتری دارد.
اگر به دنبال چیزی شبیه فایل htaccess. هستید NGINX از آن پشتیبانی نمیکند اما این مزیت را به کاربران میدهد تا برخی از جنبههای مهم وب سایت را کنترل کنند، اما مشخص است که کاربران نمیتوانند پیکربندی اصلی را ویرایش کنند. با استفاده از فایلهای htaccess، میتوانید تنظیمات کل سیستم را بر اساس هر دایرکتوری لغو کنید در نتیجه در یک محیط میزبانی مشترک، آپاچی به دلیل پیکربندی htaccess. بهتر کار می کند اما برای هاست اختصاصی VPS Nginx بهترین گزینه است.