فهرست مقاله
- برخی از سایتهای مهم که از دو وب سرور apache و nginx استفاده میکنند:
- دلایل اینکه چرا nginx در عمل بهتر از apache عمل میکند
- Nginx برای قدرت همزمانی بالاتر ساخته شده است
- Nginx کانفیگ راحتتری دارد
- عملکرد عالی nginx به عنوان Frontend Proxy
- Nginx در پاسخدهی به درخواستهای استاتیک فوقالعاده است
- Nginx یک load balancer فوق کارآمد است
در این مقاله کامل و تخصصی به این موضوع خواهیم پرداخت که چرا nginx در عمل بهتر از apache عمل میکند.
طبق آخرین آمار اعلام شده توسط وبسایت Netcraft در سال ۲۰۱۷ دو وب سرور nginx و apache جز محبوبترین و پراستفادهترین وب سرورها در جهان انتخاب شدند.
Apache یک وب سرور متنباز برای پروتکل http است که بر روی دو پلتفرم ویندوز و لینوکس قابل نصب و پیادهسازی است. این وب سرور به صورت امن، قابل انعطاف و کاملاً sync شده با پروتکل http عمل میکند.
از زمان شروع فعالیت apache در سال ۱۹۹۶ این وب سرور به عنوان یکی از محوب ترین ها در نوع خود بوده که به دلیل متنباز بودن و راحتی نصب یکی از بهترین گزینهها برای استفاده توسط کاربران لینوکسی میباشد، هر چند که این وب سرور در پلتفرم ویندوزی نیز قابل نصب و پیادهسازی است.
Nginx هم یک وب سرور متنباز با عملکرد بالا و قدرت ساپورت reverse proxy است که همانند apache بر روی لینوکس به شدت قوی عمل کرده و یک رقیب دست بالا برای وب سرورهای دیگر محسوب میشود.
انجینیکس به دلیل استفاده بسیار کم از منابع سرور، قدرت هندل بالای درخواستها و کانفیگ ساده در چند سال اخیر جز بهترین وب سرورها شناخته شده و مورد توجه قرار گرفته است.
برخی از سایتهای مهم که از دو وب سرور apache و nginx استفاده میکنند:
استفادهکنندگان از apache
PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com
استفادهکنندگان از nginx
Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud
به دلیل شهرت این دو وب سرور تا امروز مقالات فراوانی در باب این دو منتشر شده که برخی از آنها به طور واضح به نقاط ضعف و قوت هر دو پرداختهاند.
در ادامه قصد دارم تا بر اساس تجارب خودم طی چند سال اخیر یک مقاله خوب در باب اینکه چرا nginx در عمل بهتر از apache عمل میکند برای شما ارائه کنم.
دلایل اینکه چرا nginx در عمل بهتر از apache عمل میکند
Nginx یکی از سبکترین وب سرورهای موجود است که از footprints های بسیار سبکتری نسبت به apache برخوردار است و این یک مزیت بزرگ نسبت به رقیب قدیمی خود محسوب میشود.
Nginx به دلیل قرار دادن قابلیتهای مشابه apache درون هستهی خود به صورت جامع از حجم کمتر و سرعت بسیار بهتری برخوردار بوده و مصرف Ram آن به نسبت apache بسیار کمتر است.
Nginx برای قدرت همزمانی بالاتر ساخته شده است
Nginx در مقایسه با apache که از معماری multi thread و یا process-oriented استفاده میکند از معماری scalable و event-driven بهره میگیرد و بر اساس منابع موجود فعالیتهای آن کنترل میشود و از این بابت فوقالعاده انعطافپذیرتر است.
Nginx از پروسهی master بهره گرفته که زیرمجموعه آن چندین worker و helper پروسهها هستند هر worker پروسه بهطور همزمان میتواند چندین هزار درخواست را پاسخ دهد و آنها را بخواند و یا بر روی دیسک بنویسد و بدین شکل با سرورهای بالادستی خود ارتباط برقرار کند.
و helper پروسهها هم میتوانند عملیات cache را بر روی disk سخت سرور به خوبی انجام دهند و از این بایت مانند apache نیازی به نصب کش جداگانه ندارند.
همین قابلیتهای ذکر شده nginx را به یکی از سریعترین و قیاس پذیرترین وب سرورها در نوع خود تبدیل کرده که از نظر عملکردی واقعاً نمونهای برای آن وجود ندارد و این یکی از دلایلی است که چرا nginx در عمل بهتر از apache عمل میکند.
Nginx کانفیگ راحتتری دارد
Nginx از یک ساختار بسیار ساده در فایل کانفیگ خود بهره میگیرد که عملیات بهینهسازی آن را به شدت راحت میکند. هر بخش فایل کانفیگ توسط بلاکهایی جدا شده و هر قسمت کار مخصوص به خود را انجام میدهد.
بخش بلاکها به دو قسمت simple directive و block directive تقسیمبندی میشوند، هر block directive توسط دو علامت {} در اول و انتهای آن قابلشناسایی است، این block directive ها میتوانند خود دارای context هایی زیر مجموعه همچون event,http,server و … نیز باشند.
http { server { } }
و simple directive ها هم شامل name و parameters هستند که توسط علامت ; در انتهای آنها قابلتشخیص میباشند.
http {server {location / {## this is simple directive called rootroot /var/www/hmtl/example.com/;}}}
توسط include نیز میتوان فایلهای کانفیگ دیگری را به فایل اصلی الحاق کرد.
http {server {}## examples of including additional config filesinclude /path/to/config/file/*.conf;include /path/to/config/file/ssl.conf;}
عملکرد عالی nginx به عنوان Frontend Proxy
یکی از کاربردهای اساسی nginx استفاده به عنوان proxy server میباشد. بدین شکل که درخواست http ارسالی توسط کاربران دریافت و سپس توسط پروتکلی متفاوت و مجزا به proxy و یا سرورهای بالایی ارسال میشوند سپس پاسخ دریافتی از پروکسی به سمت کاربر ارسال میشود.
کانفیگ nginx به عنوان reverse proxy بسیار سادهتر از apache بوده و همین امر یکی از دلایل موفقیت nginx و استفاده کاربران از آن بوده است.
شما حتی میتوانید header رکوئست های ارسالی کاربران را موقع ارسال ویرایش کنید، آیا این یک قابلیت عالی محسوب نمیشود؟!
Nginx در پاسخدهی به درخواستهای استاتیک فوقالعاده است
محتوای استاتیک مانند فایلهای css,javascript و یا عکسها که در هر بار درخواست بدون تغییر لود میشوند و محتوای آنها ثابت است را برای سناریویی که در آن nginx به عنوان frontend برای nodejs کار میکند را بررسی میکنیم.
سرور nodejs به صورت پیشفرض با ویژگیهای خاص برای درخواستهای استاتیک به خوبی عمل میکند. البته نیاز خاصی برای کانفیگ آن جهت پاسخدهی به درخواستهای داینامیک ندارد ولی بهتر است این کار صورت گیرد تا فقط محتوای استاتیک در تعامل با کاربر عمل کند و محتویات داینامیک به شکل دیگری عمل کنند.
در این بین nginx بسیار بهتر عمل کرده و میتواند درخواستهای ارسالی از نوع استاتیک به سمت وب سرور را ایزوله کرده و خود به آنهای پاسخدهی کند و محتوای داینامیک به وب سرور دوم ارجاع دهد، این عمل قدرت پاسخدهی را به شدت بالا برده و منابع سرور را کمتر درگیر میکند.
Nginx یک load balancer فوق کارآمد است
در استفاده بهینهتر از وب سرورها و پاسخ به درخواستهای http امروزه از روش load balancing جهت تقسیم بندی وظایف بین چندین سرور استفاده میشود که این عمل علاوه بر بالا بردن سرعت لود، در صورت down شدن یکی از وب سرورها مابقی میتوانند به خوبی درخواستهای آن را بر عهده گرفته و سرور را بالا نگه دارند.
امروزه با استفاده بهینه از load balancing به شدت در استفاده از منابع سرور صرفهجویی میشود. انعطافپذیری بیشتری وجود خواهد داشت و میزان uptime سرور نیز بالا خواهد رفت.
Nginx از متدهای round-robin, least-connected, ip-hash, Generic hash و Least time جهت load balancing بهره میگیرد.
Nginx یک وب سرور منعطف است که با سیستمهایی چون cloudflare نیز بسیار sync عمل کرده و به راحتی با کانفیگ های آن میتواند تعامل کند. امیدوارم با این توضیحات حالا متوجه شده باشید که چرا nginx در عمل بهتر از apache عمل میکند.
حالا اگر قانع شدهاید و میخواهید nginx را بر روی سرور خود نصب کنید و یا آن را جایگزین apache کنید میتوانید از آموزش نصب nginx که در سایت قرار دادیم استفاده کنید.