Nginx چیست و چه کاربردهایی دارد؟ آیا به درد سایت شما میخورد؟
Nginx چیست و چه کاربردهایی دارد؟ آیا به درد سایت شما میخورد؟
قبلاً در مقالۀ وب سرور چیست دربارۀ وبسرور و انواع آن صحبت کردیم و گفتیم که Nginx (اِن-جین-اِکس) یکی از وبسرورهای پرطرفدار است. اگر با وب سرور آشنایی ندارید، حتماً مقاله مذکور را بخوانید تا درک بهتری از مقالۀ امروز که دربارۀ Nginx است، پیدا کنید.
برای اینکه مروری هم کرده باشیم، وب سرور را یک بار دیگر تعریف میکنیم.
وب سرور چیست؟
فرض کنید که وارد مرورگر موبایلتان شدهاید و آدرس iranserver.com را در آن وارد میکنید. تا اینجا مرورگر گوشی شما یک کلاینت (Client) است و یک درخواست (Request) را که همان نمایش سایت ایرانسرور است، از طریق پروتکل Http برای وبسرور ارسال کرده. وبسرور سایت ایرانسرور این درخواست را دریافت و پردازش میکند؛ سپس در جواب محتویات سایت را به شما نشان میدهد.
پس میتوان گفت وبسرور مسئولی است که وظیفه نگهداری اطلاعات، پردازش درخواست کاربران و ارسال پاسخ برای آنها را بر عهده دارد. با این اوصاف فرق بین وبسرور و هاست کاملاً مشخص است.
خب، حالا بیاید برویم سر اصل مطلب و ببینیم که ان جین ایکس چیست، چه کار میکند و به چه دردی میخورد!
Nginx چیست و چرا به وجود آمد؟
Nginx یک وب سرور است؛ وبسروری متن باز (Open Source) که پا را فراتر از مرزها گذاشته است. امروزه از Nginx بهعنوان پراکسی معکوس و لود بالانسر سرورهای Http ،TCP و UDP استفاده میشود. همچنین این وب سرور برای پروتکلهای IMAP، POP3 و SMTP، نقش پراکسی را ایفا میکند.
در سال 2004 بود که Igor Sysoev مهندس نرمافزار روس، برای حل مشکلی با نام C10K Problem این نرمافزار را طراحی و به بازار عرضه کرد. C10K Problem چیست؟ به زبان ساده یعنی مدیریت وبسوکتها برای اتصال همزمان 10 هزار کاربر!
نرمافزاری که آقای سایسف ساخت، حجم بسیار پایینی دارد و درصد بسیار کمی از منابع را درگیر میکند. این موضوع باعث میشود تا سرعت به بیشترین حد ممکن برسد. بسیار بیشتر از قبل!
فراموش نکنید که معمولاً افزایش سرعت، با بهبود عملکرد همراه میشود. این حقیقت راجع به Nginx هم صدق میکند. با این اوصاف، سرعت بالا و کارایی بیشتر دو خصوصیت بسیار مهمی هستند که با استفاده از Nginx حاصل میشوند.
حالا Nginx توانایی رسیدگی به اتصالهایی بسیار بیشتر از 10هزار تا را دارد؛ اما این نرمافزار چگونه این کار را انجام میدهد؟ چگونه بدون اینکه خللی در عملکرد کل مجموعه ایجاد شود، امکان پاسخگویی به درخواستهای تعداد زیادی کاربر فراهم میشود؟
مهمترین ویژگی Nginx که نقطه تمایز آن با دیگر رقبایش هم هست، پاسخ این سوال است. اینکه این نرمافزار، درخواستهای مشابه را در کنار هم بررسی میکند و برای هرکدام یک فرایند جداگانه درست نمیکند.
آشنایی با طرز کار Nginx، کمک میکند تا این مسئله را بهتر درک کنید.
Nginx چگونه کار میکند؟
وقتی یک کاربر بخواهد از سایتی بازدید کند، روند کار به این صورت است:
کاربر درخواست را در قالب آدرس سایت و توسط مرورگر خود به شبکه ارسال میکند. درخواست دریافتشده از جانب کاربر، توسط وبسرور پردازش میشود و در نهایت فایلهای درخواستی، بهعنوان پاسخ برای کاربر فرستاده میشوند.
مثلاً، وقتی شما قصد بازدید از سایت ایران سرور را دارید، در URL Bar مرورگرتان آدرس سایت ما را وارد میکنید. سپس وبسروری که ما از آن استفاده میکنیم، پس از پردازش درخواست شما، پاسخ را که همان صفحه اصلی وبسایت است به شما نمایش میدهد.
طرز کار دقیق قهرمان مقاله ما، یعنی Nginx، به این شکل است:
برای هر درخواستی که به وبسرور میرسد، یک thread جدید ایجاد میشود. همچنین nginx، مجهز به سیستمی است که thread poll نام دارد. این سیستم وظیفه دارد تا مدتی از این threadها نگهداری کند. به این ترتیب، وقتی درخواست جدیدی به وبسرور برسد، یکی از threadهای بیکار به آن رسیدگی میکنند.پ
به این ترتیب، تمام مشکلات ناشی از processها و threadهای بیپایان از بین میروند. مشکلاتی از جنس هدررفت زمان و هزینه!
تقریباً تمام نقاط قوت Nginx بهخاطر همین طرز کار به وجود آمدهاند. همین ساختار نامتقارن و رویداد محور که در زبان انگلیسی به آن Asynchronous Event-Driven میگویند، سرعت را بالا میبرد و امکان مدیریت هزاران اتصال همزمان را فراهم میکند. بدون اینکه عملکرد هیچکدام از اتصالها، بر پاسخی که دیگری قرار است دریافت کند تاثیری بگذارد.
احتمالاً تا اینجای کار حدس زدهاید که چه سایتهایی باید از Nginx استفاده کنند. آنهایی که بازدید بسیار بالایی دارند!
Nginx مناسب چه سایتهایی است؟
اگر بگوییم Nginx مناسب سایتهای فلان است، منظورمان این نیست که سایتهای بهمان نباید از آن استفاده کنند! صرفاً میخواهیم یادآوری کنیم که بهخاطر طرز کار خاص این وبسرور، سایتهایی که بازدیدکنندگان زیادی دارند، بهتر است از آن استفاده کنند؛ چون ساختار نامتقارن این نرمافزار، باعث میشود هر بازدیدکنندهای بدون مشکل از سایت استفاده کند.
اگر به اسامی زیر توجه کنید، میبینید که چه کمپانیهای بزرگی در سایتهایشان، Nginx را بهعنوان وبسرور قرار دادهاند:
Google, Microsoft, Apple, Facebook, Twitter, Linkedin, Netflix, Dropbox, IBM, Adobe, Cisco و…
تقریباً میتوانیم بگوییم انتهایی برای این لیست وجود ندارد. مخصوصاً با درنظر گرفتن این نکته که Nginx، روزبهروز در حال گسترش سهم خود از بازار است. در ادامه راجع به این موضوع هم صحبت خواهیم کرد؛ اما قبل از آن میخواهیم به موضوع دیگری درباره این نرمافزار بپردازیم.
اگر یادتان باشد، گفتیم حالا دیگر Nginx فقط یک وب سرور خشکوخالی نیست. کاربرد این نرمافزار، بسیار بیشتر از ارائه محتوای وب به کاربران است.
Nginx چه کاربردهایی دارد؟
هنوز هم Nginx بهعنوان یک وبسرور شناخته میشود! اما حالا دیگر قابلیتهایش فراتر از آن هستند. در ادامه میخواهیم برخی از مهمترین تواناییهای آن را بررسی کنیم.
Reverse Proxy
میدانید پراکسی چیست؟ به زبان ساده همان فیلترشکن خودمان! اما در اصل باید بگوییم:
وقتی بخواهید در اینترنت گشتوگذار کنید و در عین حال، هویتتان را مخفی نگه دارید، پراکسی این کار را برای شما انجام میدهد. به این ترتیب که تمام درخواستهایتان ابتدا برای پراکسی فرستاده میشوند و سپس به مقصد میرسند.
دریافت پاسخ هم همینطور است. پاسخ در وهله اول به دست پراکسی میرسد و در مرحله بعدی است که شما بهعنوان کاربر، پاسخ را دریافت میکنید. این طرز کار Forward Proxy یا همان پراکسیای است که در اختیار کاربران قرار دارد.
Reverse Proxy، همانطور که از نامش مشخص است، برعکس عمل میکند! یعنی برای مخفی نگه داشتن هویت اصلی سرور مورد استفاده قرار میگیرد. مثلاً Nginx در قالب یک Reverse Proxy، جلوی سرور قرار میگیرد و درخواستهای رسیده را دریافت میکند. مسلماً وظیفه ارسال پاسخ سرور هم بر دوش این نرمافزار است.
به این ترتیب، هیچ کاربری بیرون از سازمان، به سرور دسترسی مستقیم ندارد. Nginx مانند واسطهای است که از طرف سرور وکالت تامالختیار دارد. هدف از بهکارگیری این رویکرد، کوتاه کردن دست هکرها از سرور اصلی است. در نتیجه امنیت سایت تا حد بسیار زیادی افزایش مییابد.
Load Balancer
یکی دیگر از قابلیتهای وب سرور Nginx، ایفای نقش یک لود بلنسر (Load Balancer) است. برای اینکه بدانیم منظور از این نقش و قابلیت چیست، باید مفهوم Load Balancing را زیر ذرهبین ببریم.
در دنیای 0 و 1 کامپیوترها، منظور از Load Balancing، تقسیم وظایف بین منابع مختلف است! هدف اصلی از انجام چنین کاری، افزایش بهرهوری از تواناییهای سیستم است.
Load Balancer کاری میکند که قسمتی از منابع سیستم زیر بار زیادی نباشند، آن هم در حالی که دیگر منابع هیچ کاری انجام نمیدهند! انجام این کار باعث بهینهسازی زمان پاسخدهی و بالطبع افزایش سرعت میشود.
HTTP Caching
به دور از هرگونه پیچیدگی، منظور از کشینگ، کپی کردن صفحاتی است که محتوای ثابتی دارند. به این ترتیب، هربار که کاربری بخواهد از یک صفحه مشابه بازدید کند، نیاز نیست تا منتظر بارگذاری مجدد باشد. در نتیجه این کار، سرعت به میزان قابلتوجهی افزایش پیدا میکند.
بهخاطر همین ویژگی، Nginx یک گزینه بسیار مناسب برای سایتهایی است که صفحات Static (صفحات با محتوای ثابت) زیادی دارند.
این 4 مورد (3 موردی که بالاتر به آنها اشاره کردیم و ماهیت اصلیت Nginx، یعنی وبسرور) تنها قابلیتهای Nginx نیستند! مواردی که در ادامه آوردهایم هم تواناییهایی هستند که در این نرمافزار همهفن حریف دیده شدهاند:
- پشتیبانی از آخرین نسخه پروتکل اینترنت با نام IPv6
- پشتیبانی از پروتکل دودویی FastCGI همراه با Caching
- پشتیبانی از پروتکل ارتباطی WebSockets
- مدیریت فایلهای Static، مرتبسازی فایلها با فهرستسازی، ایجاد فهرست برای فایلها بهصورت خودکار
- پشتبانی از SSL/TLS بهوسیله SNI
نکته: در وبلاگ ما دو مقاله با عنوانهای ماهیت و فواید SNI و گواهی SSL چیست وجود دارند. میتوانید برای آشنایی بیشتر با این دو اصطلاح، مقالات نامبرده را بخوانید.
همه مواردی که گفتیم، جزو قابلیتهای Nginx هستند. نرمافزاری که با هدف افزایش سرعت و بهبود عملکرد وارد بازار شد و حالا هر روز بزرگتر میشود.
در ادامه مقاله میخواهیم کمی به آمار و ارقام Nginx بپردازیم. برای اینکار بهتر است پای رقیب اصلی، یعنی Apache را هم وسط بکشیم!
Nginx و Apache: دو غول دنیای وبسرورها
وب سرور آپاچی، اصلیترین رقیب Nginx است. اتفاقاً جالب است بدانید که سهم بازار آپاچی بیشتر از Nginx است؛ اما نکته اینکه، فاصله میان این دو، با سرعت زیادی در حال کاهش است!
آپاچی با سهم 33.9 درصدی از کل بازار وبسرورها، رتبه اول را از نظر سهم بازار در اختیار دارد. Nginx در یک رقابت سنگین و نفسگیر، با سهم 33.7 درصدی خودش، با فاصله بسیار اندکی در رتبه دوم جای گرفته است.
این آمار توسط سایت W3Techs ارائه شده است.
در ضمن مقالهای با نام آپاچی چیست در وبلاگ است که بهطور مفصل به این وبسرور پرداخته است. در صورت تمایل میتوانید آن را هم بخوانید.
یک نکته بسیار مهم: با اینکه آپاچی به میزان اندکی، سهم بیشتری از بازار دارد، اما Nginx گزینه محبوب سایتهای بزرگ و پربازدید است.
آمارهای زیر، با استناد به مقاله آماری دیگری از سایت W3Techs نوشته شدهاند.
- 33.8 درصد از یک میلیون سایت برتر، از Nginx استفاده میکنند. این عدد برای آپاچی 29.2 درصد است.
- 38.1 درصد از صدهزار سایت برتر، از Nginx استفاده میکنند. تنها 24 درصد از آنها، Apache را بهعنوان وبسرور انتخاب کردهاند.
- 44.5 درصد از 10 هزار سایت برتر، از Nginx بهعنوان وبسرور استفاده میکنند. این آمار برای آپاچی، 19.6 درصد است.
- در رابطه با 1000 سایت برتر، 47.1 درصد از آنها مشتری Nginx هستند و فقط 19.1 درصدشان سراغ Apache رفتهاند.
این آمار مهر تائیدی بر ادعایی هستند که بالاتر داشتیم! اینکه Nginx مناسب سایتهای پربازدید و بزرگ است. به همین خاطر هم بیشتر آنها این وبسرور را به رقیب اصلیاش یعنی Apache ترجیح میدهند. فراموش نکنید که Nginx، در مقیاسپذیری هم عملکرد بسیار خوبی دارد؛ یعنی اگر سایتی بخواهد رشد کند، این نرمافزار به بهترین شکل از این رشد پشتیبانی میکند.
حالا بیایید ببینیم مزایا و معایب Nginx چیست!
Nginx چه مزایا و معایبی دارد؟
تا به اینجای مقاله، هرچه راجع به Nginx گفتیم، بیانگر یکی از مزایای آن بود! در این قسمت میخواهیم شما را با معایب آن هم آشنا کنیم؛ اما اجازه دهید ابتدا مزایا را مجدداً مرور کنیم.
مزایای Nginx
اگر بخواهیم مزایا و معایب این وب سرور را روی ترازو بگذاریم، قطعاً کفه آن به سمت مزایا سنگینی میکند. از جمله مهمترین این نقاط قوت، میتوان به موارد زیر اشاره کرد:
- متنباز بودن.
- حجم کم که باعث میشود منابع کمتری درگیر وظایف وب سرور شوند.
- امکان مدیریت بیش از 10 هزار کاربری که بهصورت همزمان متصل شدهاند. جالب اینکه این کار، با بهکارگیری کمترین منابع ممکن انجام میشود.
- مدیریت کارآمد محتواهای Static.
- مقیاسپذیری مناسب و رضایتبخش.
- داشتن قابلیتهای بسیار در کنار وب سرور بودن.
- سادگی و رایگان بودن. (البته نسخهای پولی با عنوان Nginx Plus وجود دارد که خب امکانات کاملتری را هم در اختیار استفادهکننده قرار میدهد.)
- مناسب برای سایتهایی که روی سرور مجازی یا VPS میزبانی میشوند.
در کنار تمام این نکات مثبت، ایراداتی هم وجود دارند. بالاخره گل بیعیب خدا است!
معایب Nginx
بالاتر هم گفتیم، وب سرور Nginx، معایب بسیار کمی دارد! اما ما با توجه به وظیفهای که بر دوش داریم (اینکه مقالهای کامل و صدالبته همراه با اطلاعات درست در اختیار شما بگذاریم)، تصمیم گرفتیم تا همین یکی دو عیب را هم گوشزد کنیم:
- رقیب اصلی یعنی آپاچی، یک جامعه استفادهکنندگان بزرگ دارد که در موقع نیاز یکدیگر را راهنمایی میکنند. Nginx با اینکه استفادهکنندگان بسیاری دارد، اما نمیتوان گفت از این جهت همتراز با Apache عمل میکند و این یکی از نقاط ضعف است! جماعتی که دردی از هم دوا نمیکنند!
- ماژولهای کمتری نسبت به رقیب دارد.
- با اینکه این نرمافزار بهگونهای طراحی شده که با تمام سیستمعاملها سازگاری داشته باشد، اما خب حقیقت اینکه عملکرد آن روی ویندوز خیلی جذاب و قابلتوجه نیست.
دیدید؟ مزایا بسیار بیشتر از معایب هستند!
جمعبندی
حالا میدانید Nginx چیست! یکی از بزرگترین کمپانیهای ارائهکننده خدمات وب سرور در دنیا. نکته قابلتوجه راجع به این نرمافزار اینکه، با توجه به کاربردهای گوناگونی که دارد، نیاز به استفاده از چندین ابزار را از بین میبرد. مثلاً دیگر نیازی نیست بهصورت جداگانه، ابزاری برای Load Balancing داشته باشید. این موضوع باعث صرفهجویی در زمان و انرژی میشود؛ چراکه نیازی نیست هر ابزار را جداگانه راهاندازی و تنظیم کنیم؛ یعنی زمان زیادی ذخیره میشود!
اگر سایت بزرگ و پربازدیدی دارید، Nginx همان وبسروری است که به آن نیاز دارید.
دو سایت Kinsta و Nginx منابع ما برای تهیه این مقاله بودند.
اگر نظر یا سوالی در رابطه با Nginx دارید، برایمان کامنت بگذارید.