ویژگیهای کلیدی و تفاوتهای وب سرور Apache و Nginx
در این مقاله سعی داریم تفاوت وب سرور Apache و Nginx را مورد بررسی قرار دهیم. این که کدام وب سرور سریعتر است؟ مزایا و محدودیتهای هرکدام چیست؟ کدام گزینه بهتری برای شما میباشد؟
همچنین در این مقاله علاوه بر بررسی تفاوت وب سرور Apache و Nginx، ویژگی و دلیل انتخاب هر کدام را بررسی خواهیم کرد.
افیکس هاست با ارائه باکیفیتترین وب سرورها بر روی هاست و سرور مجازی خود، این امکان را برای شما فراهم خواهد کرد تا بهترین عملکرد را از وبسایت خود شاهد باشید.
هماکنون با خرید سرور مجازی لینوکس، از وب سرور مناسب برای میزبانی و مدیریت سایت خود بهرهمند شوید:
مقایسه Apache و Nginx
اصلیترین تفاوت nginx و آپاچی در طراحی معماری آنها میباشد. آپاچی از رویکرد فرآیند-محور استفاده نموده و رشته (Thread) جدیدی را برای هر درخواست ایجاد مینماید. در صورتی که Nginx از معماری رویداد-محور جهت مدیریت چند درخواست در یک رشته استفاده مینماید.
وب سرور آپاچی چیست؟
سرور آپاچی یک وب سرور چندسکویی (cross-platform) متن باز است که با نام Httpd نیز شناخته شدهاست.
ویژگیهای آپاچی
بنیان نرم افزار آپاچی، نام تجاری و سرویسهایش را مدیریت مینماید.
این سرور توسط تیمی از برنامهنویسان ASF، توسعه داده شده و نگهداری میشود.
آپاچی تقریبا بر روی لینوکس اجرا میگردد و قدرت و توان آن حدود ۴۶% تمامی وب سایتهای سراسر دنیا است.
مؤلفه کلیدی LAMP (Linux، Apache، MySQL و PHP) است.
وب سرور Nginx چیست؟
انجین ایکس وب سروری است که در سال ۲۰۰۴ توسط ایگور سیسوف منتشر شد اما امروزه چیزی فراتر از یک وب سرور است.
ویژگیهای Nginx
در ابتدا بسیاری از افراد از Nginx به عنوان مکمل آپاچی استفاده مینمودند.
در بیشتر موارد برای بکار بردن فایلهای استاتیک استفاده میشد. اما امروزه به عنوان یک وبسرور کامل پیشرفت کرده است که با طیف وسیعی از تسکهای سرور سر و کار دارد.
امروزه Nginx اغلب به عنوان یک reverse proxy، load balancer، mail prox وHTTP caching استفاده میشود.
آپاچی و Nginx هر دو به عنوان وبسروری برای لینوکس مورد استفاده قرار میگیرند و به همراه یکدیگر بیش از ۵۰% ترافیک وب را سرویسدهی مینمایند.
درحالی که آپاچی و Nginx در بسیاری از موارد کیفیتی، مشارکت دارند، در شرایط مختلف تفاوتهایی را نیز دارا میباشند که هرکدام روش و استفاده و سناریو خاص خود را دارند.
در ادامه به بررسی تفاوتهای وب سرور Apache و Nginx و جزئیات بیشتری درمورد آنها میپردازیم:
تفاوتهای Apache و Nginx چیست؟
سبک معماری پایه
همانطور که پیش از این گفته شد تفاوت اساسی آپاچی و Nginx در طراحی معماری آنها است. در واقع در روش مدیریت ارتباطات و ترافیک و پاسخ به شرایط ترافیکی مختلف تفاوت دارند. یکی از آنها بر رویکرد فرآیند-محور (process-driven) دلالت داشته و دیگری بر معماری رویداد-محور (event-driven).
[Apache]
رویکرد فرآیند محور
ایجاد رشته جدید برای هر درخواست
آپاچی از رویکرد چند-رشتهای (Multi-Thread) پیروی مینماید و ماژولهای چندگانه پردازشی گوناگونی را ارائه میدهد. این pre-module ها ۳ نوع از الگوریتمهای مدیریت درخواست بوده که هرکدام برای احتیاجات سرور میباشند.
ماژولهای چند-فرآیندی (MPMs)، (Multi-Processing Modules)، معماری منعطقی را برای انتخاب ارتباط متفاوت و الگوریتمهای مدیریت مختلف ایجاد مینماید. همچنین نسخههای گوناگون آپاچی ۲ ماژولهای پردازشی مختلفی را به کار میگیرد.
۳ نوع Apache MPMs اصلی:
- Process (Pre-fork) MPM
- Worker MPM
- Event MPM
آپاچی ۲.۲ ازmpm_worker ، mpm_preforkو mod_php استفاده میکرد، درحالی که Apache 2.4 جهت استفاده از mpm_event و php-fpm پیکربندی شده است.
به صورت پیشفرض آپاچی ۲٫۲ در Pre-fork mode (mpm_prefork) پیکربندی شدهاست و به تعدادی از پردازشها که هر کدام میتوانند یک تک درخواست را در لحظه سرویسدهی کنند پاسخ میدهد. به عبارت دیگر، آپاچی هر لحظه یک thread را جهت مدیریت هر درخواست ارتباط، ایجاد مینماید.
Thread یا رشته چیست؟
کوچکترین دنباله از دستورالعمل برنامهریزی شدهاست که میتواند به صورت مستقل توسط schedule مدیریت شود. در اکثر اوقات نیز جزئی از فرآیند است.
یا به عبارتی فرآیندهای کوچکی هستند که هر کدام تنها یک هدف را انجام میدهند و در نهایت پس از پایان یافتن اجرای مجموعه رشتهها یک برنامه یا یک فرآیند اصلی پایان پیدا میکند. از رشته برای انجام کارهای موازی و همزمان استفاده میشود. اکثر برنامههایی که نوشته میشود فقط یک رشته دارند که همان فرآیند اصلیست و با پایانیافتن آن، برنامه نیز به پایان میرسد.
معماری اولیه آپاچی منجر به مصرف زیاد منابع میگردد، در نتیجه میتواند مشکلاتی مانند کاهش سرعت را برای سرور ایجاد نماید.
[Nginx]
رویکرد رویداد محور
مدیریت درخواستهای چندگانه در یک رشته
همانطور که قبلا گفته شد Nginx معماری رویداد محور را به کار گرفتهاست و با درخواستهای همزمان سروکار دارد و برای استفاده از الگوریتم هندلینگ ارتباط رویداد-محور non-blocking طراحی شدهاست. بنابراین فرآیند آن میتواند هزاران درخواست ارتباط در یک رشته پردازشی را مدیریت کند.
به طور مثال ماژولهای فرآیند ارتباطات این اجازه را به Nginx میدهند تا بسیار سریع و با منابع محدود کار کند.
علاوه براین میتوان از Nginx در سیستمهای کم قدرت و با سیستمهایی که تحت بار سنگین کار میکنند، استفاده نمود.
درنتیجه Nginx ساختار سبکتری داشته و معماری سریعتری نسبت به آپاچی دارد.
عملکرد
هر دو وبسرور به صورت متفاوت محتوای داینامیک و استاتیک را پردازش مینمایند. اما گاها مشاهده شدهاست که Nginx در پردازش محتواهای استاتیک بهتر عمل مینماید.
محتوای استاتیک
از روش مبتنی بر فایل برای سرویس دهی به محتوای استاتیک استفاده مینماید.
پشتیبانی از سیستمعامل
پشتیبانی از سیستمعامل مورد بسیار مهمی است که هر دو وبسرور مشابه میباشند.
[Apache]
از سیستمهای Unix که شامل Linux و BSD است پشتیبانی مینماید.
از MS-windows پشتیبانی مینماید.
آپاچی بر روی تمامی سیستمهای Unix (لینوکس یا BSD) اجرا میشود و پشتیانی کاملی نیز برای ماکروسافت ویندوز دارد.
[Nginx]
تقریبا از تمامی سیستمعاملهای Unix پشتیانی مینماید.
تا اندازهای قابلیت پشتیبانی از ویندوز را نیز دارا است اما عملکرد آن بر روی ویندوز به اندازه قدرت سایر پلتفرمها نمیباشد. در نتیجه در این مورد آپاچی بهتر عمل مینماید.
پیکربندی (Configuration)
در این بخش بررسی میکنیم که پیکربندی کدام نوع وبسرور سریعتر و راحتتر است.
[Apache]
این امکان را فراهم میسازد تا توسط فایلهای .htaccess پیکربندی اضافی بر روی هر دایرکتوری انجام گردد.
این معماری به کاربران غیر اصلی این اجازه را میدهد تا جنبههای خاص وبسایت را بدون اعطای دسترسی ادیت config اصلی، کنترل نمایند.
[Nginx]
امکان پیکربندی اضافه را نداده و باعث افزایش عملکرد میشود و به درخواستها سریعتر پاسخ میدهد زیرا نیاز نیست به دنبال فایلهای htaccess بگردد. درنتیجه در این مورد از آپاچی سریعتر است.
امنیت
هر دو این وبسرور امنیت قابل تعمیمی را برای کدهای مبتنی بر C دارا میباشند.
[Apache]
آپاچی این اطمینان را میدهد که تمامی وبسایتهایی که بر روی این وبسرور قرار دارند نسبت به هکرها و خسارات در امان باشند و نکات مهمی را برای پیکربندی وبسرور برای حملات دیداس پیشنهاد میدهد، همانطور که ماژول mod_evasive برای پاسخ به HTTP DoS، DDoS یا حملات بروت فورس پیشنهاد شدهاست.
[Nginx]
پایه کد Nginx به طور قابل ملاحظهای کوچکتر است و لیستی از پیشنهادات امنیتی جدید را دارا است.
پشتیبانی
[Apache]
پشتیبانی ویژگیای است که هر مشتری علاقهمند به داشتن و استفاده از آن میباشد. همچنین تفاوت خاصی میان پشتیبانی آپاچی و Nginx وجود ندارد.
پشتیبانی آن از طریق mailing list , IRC و stack overflow انجام میگزدد.
پشتیبانی آپاچی از طریق شرکتهای سوم شخص نظیر OpenLogic در دسترس میباشد اما لیست پشتیبانی رسمی توسط آپاچی ارائه نشدهاست.
[Nginx]
پشتیبانی آن از طریق mailing list , IRC و stack overflow و فرومها انجام میگردد.
شرکت Nginx محصول تبلیغاتی با نام Nginx Plus را که دارای مجموعهای از ویژگیهای اضافه پشتیبانی مرتبط با load balancing, media streaming و monitoring است ، پیشنهاد میدهد.
در نتیجه پشتیبانی هر دو وبسرور یکسان بوده و هیچ کدام برتری نسبت به دیگری ندارد.
در این بخش تفاوت وبسرور Apache و Nginx به صورت اجمالی آمدهاست:
Nginx | Apache |
---|---|
به عنوان وبسرور و سرور reverse proxy طراحی شدهاست. | به عنوان وبسرور طراحی شدهاست. |
میتواند درخواستهای همزمان چندگانه کاربر را همراه با منابع محدود پردازش نماید. | قادر به پردازش درخواستهای همزمان چندگانه همراه با ترافیک سنگین وب نمیباشد. |
رویکرد event-driven جهت سرویسدهی به درخواستهای کاربر را دارد. | رویکرد Multi-thread جهت پردازش درخواستهای کاربر دارد. |
امکان لود داینامیکی ماژولها وجود ندارد و لازم است در هسته نرمافزار کامپایل گردند. | ماژولها به صورت داینامیکی لود یا unload میگردند که آن را منعطف تر مینماید. |
امکان جایگزینی Nginx , Apache وجود ندارد و هرکدام نقاط قوت و ضعف خود را دارا میباشند. با توجه به تمامی فواید و محدودیتها و تفاوتهای گفتهشده تا حدودی ایده لازم جهت انتخاب وبسرور مناسب را در اختیار دارید.
چه زمانی آپاچی جایگزین Nginx میشود؟
Apache .htaccess
Nginx قابلیت پشتیبانی از چیزی مانند فایل .htaccess آپاچی را ندارد اما با استفاده از آپاچی امکان کنترل برخی جنبههای مهم وبسایت وجود دارد.
امکان ادیت پیکربندی اصلی وبسرور برای کاربران وجود ندارد.
با استفاده از فایل htaccess امکان رد کردن تنظیمات سیستمی هر دایرکتوری وجود دارد.
در محیط هاست اشتراکی، آپاچی به دلیل تنظیمات htaccess بهتر کار میکند. برای هاستینگ اختصاصی یا سرور مجازی، Nginx گزینه مناسبتری است.
در رابطه با محدودیتهای عملکردی از آپاچی استفاده گردد.
Nginx دارای برخی ماژولهای هستهای است که بسیار مهم میباشند با این وجود یکسری محدودیت عملکردی برای Nginx وجود دارد. در صورت وجود محدودیتها یا نیاز به استفاده از ماژولهای اضافه که توسط Nginx پشتیبانی نمیشوند، آپاچی را انتخاب نمایید.
آپاچی به عنوان وب سروری معرفی میشود که از امنیت بالایی برخوردار بوده و نسبت به دیگر وب سرورها قدرت بیشتری در برابر حملات و اقدامات خرابکارانه هکرها دارد.
شما نیز اگر به دنبال افزایش امنیت وبسایت خود هستید، با خرید هاست لینوکس مجهز به وب سرور آپاچی به این امر مهم دست خواهید یافت. هماکنون هاست لینوکس خود را سفارش دهید:
انتخاب اینکه کدام وبسرور برای شما مناسبتر است و آن را انتخاب مینمایید بسیار مهم میباشد. امیدواریم این مقایسه شما را در انتخاب بهترین وبسرور کمک نماید.