برنامه نویسی | مقایسه Nginx و Apachi به صورت تخصصی در پای سافت
مقایسه Nginx و Apachi به صورت تخصصی در پای سافت
  • علیرضا
  • ۱۳۹۸-۰۳-۱۷
  • ۵۴۷

مقایسه Nginx و Apachi به صورت تخصصی در پای سافت


وب سرور ها بخش جدایی ناپذیر تمامی سرورها برای ارائهء مطالب مبتنی بر وب بر روی اینترنت هستند.

وب سرورهای متعددی در بازار ارائه شده اند ولی از مهم ترین آنها می توان به Apache و Nginx اشاره کرد. انتخاب بین این دو وب سرور گاها باعث سردرگمی برخی کاربران می شود. در این مقاله سعی داریم به مقایسه ی این دو وب سرور بپردازیم.

باید در نظر داشت این دو وب سرور نمی توانند جایگزینی برای یکدیگر به حساب بیایند زیرا هر کدام از آنها خصوصیات و کاربردهای خاص خود را دارند. در نتیجه برای انتخاب بین این دو وب سرور باید نیازهای خود را بررسی کنیم. در این مقاله به تفاوت های بین این دو وب سرور نیز خواهیم پرداخت.

آپاچی

وب سرور Apache: انتشار این وب سرور در سال 1995 انجام گردید، و با توجه به قدرتی که داشت آپاچی را به یکی از ارکان های اصلی WWW مبدل ساخت. در سال 2009 محبوبیت این وب سرور افزایش چشمگیری داشت بطوری که هنوز هم برنامه نویسان سایت که نیاز به پلتفرم لینوکس دارند از آن استفاده می نمایند، البته لازم بذکر است که سیستم عامل ویندوز نیز قابلیت پشتیبانی از Apache را دارد. آپاچی دارای برنامه کارساز تحت وب جهت ارائه خدمات HTTP است، این وب سرور با امکانات منحصر بفردی که دارد در گسترش شبکه جهانی راهکارهای فراوانی را فراهم می نماید

آپاچی وب سرور

Nginx

وب سرور Ngnix: این وب سرور Open Source و یا همان متن باز است، Ngnix در سال 2004 معرفی گردیده و بر مبنای استفاده هم زمان از منابع سرور استوار بوده است . از قابلیت های آن میتوان توازن در بارگذاری، حافظه نهان، کنترل دسترسی و مدیریت پهنای باند را نام برد. این وب سرور به دومین وب سرور محبوب از نظر کاربران اینترنتی تبدیل شده است، Ngnix توسط سیستم عاملهای unix ,windows و mac پشتیبانی میگردد که در حال حاضر حدود 12 درصد سایت های موجود از آن استفاده می نمایند.

انجین ایکس

در ادامه به تعدادی از تفاوت های Nginx و Apache اشاره خواهیم کرد:

معماری مدیریت ارتباطات

Apache

آپاچی ماژول های چند-فرآیندی متفاوتی را ارائه می دهد. مدیر سرور می تواند این ماژول ها را به راحتی از طریق MPM تغییر دهد.

MPM_Prefork :  این ماژول هر یک از پردازش ها را با یک رشته ی پردازش جداگانه ایجاد می کند. هر یک از رشته ها تنها یک درخواست را پاسخ می دهد. ایجاد هر یک از پردازش ها نیاز به مقداری حافظه ی اصلی دارد، در نتیجه تعداد پردازش های ممکن محدود است و بالا رفتن تعداد پردازش ها باعث کندی سرور می شود. این ماژول تا زمانی که تعداد درخواست ها بیشتر از تعداد پردازش های ممکن نشده باشد سریعتر عمل میکند. این ماژول بهترین انتخاب برای کار با PHP با استفاده از mod-php است.

MPM_worker:  این ماژول پردازش ها را با چندین رشته ایجاد میکند. زمانی که چندین رشته وجود داشته باشد امکان ایجاد چندین کانکشن نیز وجود خواهد داشت. این ماژول بهینه تر از mpm_prefork عمل می کند. در این ماژول نیازی به ایجاد یک رشته ی جدید برای هر درخواست نیست و درخواست های جدید توسط رشته های موجود دریافت می شود در نتیجه نیازی به صبر کردن برای آزاد شدن پردازش ها نخواهد بود.

MPM_Event:  این ماژول از خیلی ابعاد شبیه به mpm_worker عمل میکند. در این ماژول چه درخواستی وجود داشته باشد یا خیر اتصال باز می ماند. این ماژول وظیفه ی رسیدگی به باز ماندن اتصالات را نیز بر عهده دارد. ماژول رشته هایی را به باز نگهداشتن اتصالات تخصیص می دهد و باقی درخواست ها را به رشته های دیگر منتقل می کند. این کار باعث می شود پردازش ها برای باز نگه داشتن اتصالات هزینه نشوند.

Nginx

Nginx با هدف ارائه ی سرویس به درخواست هایی با تعداد بسیار بالا و با مصرف منابع پایین طراحی شده است. به دلیل ناتوانی آپاچی در ارائه ی سرویس در زمانی که تعداد درخواست ها بالا می باشد Nginx ارائه شد و بازدهی خوبی داشت. در سرورهایی که تعداد درخواست های بالایی دریافت می کنند عموما Nginx بهتر از آپاچی یا وب سرورهای دیگر عمل می کند.

Nginx در ارائه ی داده های غیر پویا بسیار سریع بوده و بازدهی آن تقریبا دو برابر سریع تر از آپاچی است. نحوه ی کار Nginx به طور کلی با آپاچی تفاوت می کند. در Nginx یک پردازش مرکزی یا Master process وجود دارد. عموما پیشنهاد می شود برای هر هسته ی CPU یک Master process تعریف شود. این پراسس مرکزی چندین پردازش کاری ایجاد می کند. هر پردازش کاری تنها یک رشته ایجاد می کند. تفاوت اصلی Nginx و آپاچی در نوع پردازش و ایجاد رشته ها است که توضیح داده شد.

در Nginx یک رشته می تواند به چندین اتصال پاسخ دهد، در صورتی که در آپاچی هر رشته تنها به یک اتصال پاسخ می دهد. از آنجایی که یک رشته ی ایجاد شده می تواند به تعداد زیادی درخواست پاسخ دهد، نیازی به ایجاد رشته های جدید نیست و در نتیجه از حافظه ی کمی استفاده می شود.

 nginx apachi اپاچی و انجین ایکس

محتوای پویا و ایستا

محتوای ایستا:

در این زمینه Nginx با ۲.۵ برابر سرعت بیشتر در پردازش محتوای ایستا با ۱۰۰۰ اتصال همزمان نسبت به آپاچی پیشتاز است. در یک آزمایش دیگر با ۵۱۲ اتصال همزمان Nginx دو برابر سریع تر از آپاچی عمل کرده و ۴ درصد حافظه ی کمتری مصرف می کند. پس در صورتی که سرویس شما مقدار زیادی اطلاعات ایستا ارائه می دهد بهینه است از Nginx به عنوان وب سرور خود استفاده کنید.

در آزمایشی که برای آزمایش کارایی Nginx و آپاچی در ارائه ی سرویس به CMS ها (در اینجا از وردپرس استفاده شده است) انجام شد، هر دو وب سرورها تقریبا بازدهی یکسانی دارند.

محتوای پویا:

با نظر به اینکه اکثر وبسایت های فعالی و سرویس های آنلاین از محتوای پویا برای ارائه ی سرویس به کاربران استفاده می کنند، سرعت ارائه ی اطلاعات پویا توسط وب سرور از اهمیت ویژه ای برخوردار است.

در آزمایش های انجام شده بر روی دو وب سرور nginx و آپاچی هر دو با سرعت یکسانی اطلاعات پویا را ارائه می کنند. همچنین مقدار مصرف حافظه و قدرت پردازش نیز در هر دو وب سرور یکسان است. در استفاده از CMS ها نیز (وردپرس، جوملا، دروپال و…) هر دو وب سرور توانایی یکسانی در ارائه ی سرویس دارند.

در هنگام ارائه ی محتوای پویا، آپاچی به شکل مستقیم با PHP کار میکند ولی Nginx با استفاده از PHP-fpm این کار را انجام می دهد.

با توجه به این معیارها و آزمایشات صورت گرفته، تفاوت زیادی از نظر انتخاب بین این دو وب سرور برای ارائه ی محتوای پویا وجود ندارد.

سیستم عامل

آپاچی:

آپاچی از سیستم عامل های مبتنی بر لینوکس و همچنین Unix به خوبی پشتیبانی می کند. همچنین مشکلی با پشتیبانی از وب سرورهای مبتنی بر ویندوز سرور ندارد.

:Nginx

Nginx به خوبی از سیستم عامل های مبتنی بر لینوکس و Unix پشتیبانی می کند ولی بر روی سرورهای مبتنی بر ویندوز به شکل محدود اجرا می شود. با اینحال امکان ارائه ی محتوای پویا و ایستا را بر روی ویندوز نیز دارد. در نظر داشته باشید در حال حاضر اکثر وب سرورها مبتنی بر لینوکس هستند.

از نظر امکانات:

آپاچی :

- استفاده از ماژول ها بصورت پویا، ماژول پردازش چندگانه درخواست ها [MPM]
- بسیار مقیاس پذیر(براحتی 10000 اتصال را بصورت همزمان مدیریت می کند)
- مدیریت کردن فایل های static و فایل های index
- پشتیبانی از htaccess
- مکانیزم Load Balancing بصورت همزمان
- قابلیت Fault Tolerance و Failover به همراه بازیابی خودکار
- پوشه public_html برای هر کاربر
- پشتیبانی از XML , WebSocket, FastCGI, SCGI, AJP و uWSGI
- پشتیبانی از Cash و تنظیمات پویا
- پشتیبانی از IPV6
- قابلیت TLS/SSL با SNI و پشتیبانی از OCSP stapling با استفاده از OpenSSL
- پشتیبانی از پروتکل HTTP/2 و پشتیبانی از بازنویسی محتوا و gzipو URL Rewriting
- اعمال محدودیت در کانکشن های فعال و اعمال محدودیت در پهنای باند
- محدودیت در تعداد درخواست های پردازش و ردگیری Session
- پشتیبانی از perl و PHP به همراه اسکریپت های Lua و پشتیبانی از CGI

Ngnix :

- هندل کردن بیش از 10000 کانکشن همزمان با کمترین میزان مصرف حافظه (2.5 مگابایت برای 10000 اتصال HTTP)
- هندل کردن فایل های static و پیاده سازی Load Balancing
- قابلیت Fault tolerance
- قابلیت TLS/SSL با SNI و پشتیبانی از OCSP stapling با استفاده از OpenSSL
- سازگاری با IPV6 و پشتیبانی از پروتکل HTTP/2 و امکان URL rewriting
- اعتبار سنجی روی Webpage ها
- قابلیت Streaming برای فرمت های FLV و MP4
- فعال سازی gzip
- اعمال محدودیت روی connection ها و اعمال محدودیت تعداد پردازش ها
- کنترل پهنای باند و کنترل بر اساس IP و ردگیری کاربران
- بهره گیری از تعداد زبادی ماژول های third party
- پشتیبانی از زبان اسکریپتی Perl و پشتیبانی از SMTP, POP3 و IMAP
- فایروال برنامه های تحت وب با استفاده از ماژول Naxsi

 انجین ایکس وب سرور آپاچی

از نظر سرعت :

. Ngnix بصورت مستقل (standalone)
. apache+nginx reverse proxy
. Apache

از نظر امنیت :

. Apache بدلیل انواع ماژول امنیتی
. Nginx بدلیل داشتن قابلیت های امنیتی و متن باز بودن
. apache+nginx بدلیل ترکیب بودن دو وب سرور و دخالت apache در پردازش اطلاعات

از نظر راحتی کار و سادگی :

. apache بدلیل سازگاری با پنل های مختلف
. apache+nginx بدلیل سازگاری خوب و وجود پلاگین های آماده جهت نصب و کانفیگ
. nginx بدلیل دستی بودن و مشکل تر بودن تنظیمات و کانفیگ در رتبه انتهایی قرار میگیرد.

از نظر مقرون به صرفه و اقتصادی بودن :

. apache بدلیل رایگان بودن و دسترسی آسان و منابع زیاد برای مدیریت این وب سرور
. nginx بدلیل متن باز و رایگان بودن
. apache+nginx بدلیل وجود پلاگین و قیمت ارزان

علیرضا

Alireza.kh

نظر شما در مورد این پست چیه؟!