فرض کنید که وارد مرورگر موبایلتان شدهاید و آدرس سایت مورد نظرتان را در آن وارد میکنید. تا اینجا مرورگر گوشی شما یک کلاینت (Client) است و یک درخواست (Request) را که همان نمایش سایت مورد نظر است، از طریق پروتکل Http برای وبسرور ارسال کرده.
وبسرور سایت مد نظر این درخواست را دریافت و پردازش میکند؛ سپس در جواب محتویات سایت را به شما نشان میدهد.
پس میتوان گفت :
وبسرور مسئولی است که وظیفه نگهداری اطلاعات، پردازش درخواست کاربران و ارسال پاسخ برای آنها را بر عهده دارد. با این اوصاف فرق بین وبسرور و هاست کاملاً مشخص است.
خب، حالا بیاید برویم سر اصل مطلب و ببینیم که انجین ایکس چیست، چه کار میکند و به چه دردی میخورد.
انجین ایکس (Engine-X) در واقع وب سروری متن باز است که کارآمد و رایگان می باشد، ایده و گسترش آن در سال 2002 توسط شخص روسی با نام Igor Sysoev (ایگور سایسف) راه اندازی شد و در سال 2004 برای اولین بار منتشر شد و در اختیار عموم افراد قرار گرفت و هم اکنون بسیاری از دامنه های فعال را میزبانی می کند.
امروزه از Nginx بهعنوان پراکسی معکوس و لود بالانسر سرورهای Http ،TCP و UDP استفاده میشود. همچنین این وب سرور برای پروتکلهای IMAP ، POP3 و SMTP ، نقش پراکسی را ایفا میکند. اساس این وب سرور را می توان برای خدمت رسانی به توسعه صفحه پویا HTTP بر روی شبکه از طریق SCGI ،FastCGI برای اسکریپت ها و سرویس دهنده های نرم افزار WSGI یا ماژول های Phusion و همچنین استفاده به عنوان Load balancer معرفی نمود.
نرمافزاری که آقای سایسف ساخت، حجم بسیار پایینی دارد و درصد بسیار کمی از منابع را درگیر میکند. این موضوع باعث میشود تا سرعت به بیشترین حد ممکن برسد. بسیار بیشتر از قبل!
از دلایل معروف بودن Nginx میتوان کارایی بالای آن ، پایدار بودن ، دارا بودن ویژگی های مفید و در آخر استفاده پایین از منابع را نام برد.
در رابطه با وب سرور آپاچی یکی از مشکلات بارز، محدود بودن کانکشن ها همزمان 10000 عددی است و این که مصرف حافظه بسیار زیاد دارد.
وب سرور Nginx این مشکل را حل نموده است و انتشار آن مبنی بر لایسنس BSD است.
علاوه بر این فایل های استاتیکی را نیز مورد پشتیبانی قرار میدهد.
از آنجا که ریشه های آن در بهینه سازی عملکرد در مقیاس است، Nginx اغلب از سایر وب سرورهای محبوب در آزمایش های معیار، به خصوص در مواقعی که محتوای استاتیک و یا درخواست های همزمان زیاد دارند، بهتر عمل می کند.
وقتی یک کاربر بخواهد از سایتی بازدید کند، روند کار به این صورت است:
کاربر درخواست را در قالب آدرس سایت و توسط مرورگر خود به شبکه ارسال میکند. درخواست دریافتشده از جانب کاربر، توسط وبسرور پردازش میشود و در نهایت فایلهای درخواستی، بهعنوان پاسخ برای کاربر فرستاده میشوند.
مثلاً، وقتی شما قصد بازدید از سایت ایران سرور را دارید، در URL Bar مرورگرتان آدرس سایت ما را وارد میکنید. سپس وبسروری که ما از آن استفاده میکنیم، پس از پردازش درخواست شما، پاسخ را که همان صفحه اصلی وبسایت است به شما نمایش میدهد.
طرز کار دقیق قهرمان مقاله ما، یعنی Nginx، به این شکل است:
برای هر درخواستی که به وبسرور میرسد، یک thread جدید ایجاد میشود. همچنین nginx ، مجهز به سیستمی است که thread poll نام دارد. این سیستم وظیفه دارد تا مدتی از این threadها نگهداری کند. به این ترتیب، وقتی درخواست جدیدی به وبسرور برسد، یکی از threadهای بیکار به آن رسیدگی میکنند.
پس به این ترتیب، تمام مشکلات ناشی از processها و threadهای بیپایان از بین میروند. مشکلاتی از جنس هدررفت زمان و هزینه!
تقریباً تمام نقاط قوت Nginx بهخاطر همین طرز کار به وجود آمدهاند. همین ساختار نامتقارن و رویداد محور که در زبان انگلیسی به آن Asynchronous Event-Driven میگویند، سرعت را بالا میبرد و امکان مدیریت هزاران اتصال همزمان را فراهم میکند. بدون اینکه عملکرد هیچکدام از اتصالها، بر پاسخی که دیگری قرار است دریافت کند تاثیری بگذارد.
این روز ها اینترنت آنقدر گسترده شده است که در دهه گذشته پیش بینی آن غیر ممکن بود. تحولی عظیم از HTML های ساده که متنهای قابل کلیک ارائه میکردند و بر پایه NCSA و روی سرور های وب آپاچی بودند تا میانگیر های ارتباطی که همواره برقرار هستند و ازسوی بیش از دو میلیارد کاربر در سراسر جهان مورد استفاده قرار می گیرند. با افزایش تعداد کامپیوترها، دستگاه های موبایل و تبلت هایی که همواره متصل هستند، چشم انداز اینترنت به سرعت در حال تغییر است. جزئیات سرویس های آنلاین بسیار بیشتر شده و به سمت دسترسی به اطلاعات و سرگرمیهای برخط حرکت میکنند. بنابراین وبسایتها در زمان حال بسیار پیچیدهتر از قبل شدهاند و عموما به مهندسی بیشتری برای پیشرفت و مقیاسپذیری نیاز دارند. NginX یکی از وب سرور هایی بود که تمرکز خود را روی این قضیه معطوف کرد.
همواره یکی از بزرگترین چالش های یک معمار وب سایت، همزمانی درخواست ها بوده است. از ابتدای به وجود آمدن سرویس های وب، تعداد درخواست های همزمان در حال رشد است. برای یک وبسایت محبوب اصلا غیر معمول نیست که بتواند به صد ها هزار یا حتی میلیونها کاربر بهطور همزمان سرویس دهد. در دهه گذشته علت اصلی همزمانی، اتصال های کند بود -کاربرانی با ارتباطات تماسی یا Dial-up اما امروزه افزایش همزمانی علت دیگری دارد؛ ترکیبی از کاربران موبایل و معماری های جدیدتر برنامه های کاربردی که معمولا برپایه نگه داشتن ارتباطی پایدار هستند و به کاربران اجازه می دهند با اخبار و اطلاعاتی که از طریق دوستان خود دریافت می کنند، به روز شوند. عامل مهم دیگری که به افزایش همزمانی کمک می کند، تغییر رفتار مرورگر های نوین است؛ اینگونه مرورگر ها برای بالا بردن سرعت بارگذاری، چهار یا شش اتصال همزمان را با یک وبسایت برقرار میکنند.
اگر بگوییم Nginx مناسب سایتهای فلان است، منظورمان این نیست که سایتهای بهمان نباید از آن استفاده کنند! صرفاً میخواهیم یادآوری کنیم که بهخاطر طرز کار خاص این وبسرور، سایتهایی که بازدیدکنندگان زیادی دارند، بهتر است از آن استفاده کنند؛ چون ساختار نامتقارن این نرمافزار، باعث میشود هر بازدیدکنندهای بدون مشکل از سایت استفاده کند.
اگر به اسامی زیر توجه کنید، میبینید که چه کمپانیهای بزرگی در سایتهایشان، Nginx را بهعنوان وبسرور قرار دادهاند:
Google, Microsoft, Apple, Facebook, Twitter, Linkedin, Netflix, Dropbox, IBM, Adobe, Cisco و...
تقریباً میتوانیم بگوییم انتهایی برای این لیست وجود ندارد. مخصوصاً با درنظر گرفتن این نکته که Nginx ، روزبهروز در حال گسترش سهم خود از بازار است.
هنوز هم Nginx بهعنوان یک وبسرور شناخته میشود! اما حالا دیگر قابلیتهایش فراتر از آن هستند. در ادامه میخواهیم برخی از مهمترین تواناییهای آن را بررسی کنیم:
میدانید پراکسی چیست؟ به زبان ساده همان فیلترشکن خودمان! اما در اصل باید بگوییم:
وقتی بخواهید در اینترنت گشتوگذار کنید و در عین حال، هویتتان را مخفی نگه دارید، پراکسی این کار را برای شما انجام میدهد. به این ترتیب که تمام درخواستهایتان ابتدا برای پراکسی فرستاده میشوند و سپس به مقصد میرسند.
دریافت پاسخ هم همینطور است. پاسخ در وهله اول به دست پراکسی میرسد و در مرحله بعدی است که شما بهعنوان کاربر، پاسخ را دریافت میکنید. این طرز کار Forward Proxy یا همان پراکسیای است که در اختیار کاربران قرار دارد.
در Reverse Proxy، همانطور که از نامش مشخص است، برعکس عمل میکند! یعنی برای مخفی نگه داشتن هویت اصلی سرور مورد استفاده قرار میگیرد. مثلاً Nginx در قالب یک Reverse Proxy، جلوی سرور قرار میگیرد و درخواستهای رسیده را دریافت میکند. مسلماً وظیفه ارسال پاسخ سرور هم بر دوش این نرمافزار است. به این ترتیب، هیچ کاربری بیرون از سازمان، به سرور دسترسی مستقیم ندارد. Nginx مانند واسطهای است که از طرف سرور وکالت تامالختیار دارد. هدف از بهکارگیری این رویکرد، کوتاه کردن دست هکرها از سرور اصلی است. در نتیجه امنیت سایت تا حد بسیار زیادی افزایش مییابد.
یکی دیگر از قابلیتهای وب سرور Nginx، ایفای نقش یک لود بلنسر(Load Balancer) است. برای اینکه بدانیم منظور از این نقش و قابلیت چیست، باید مفهوم Load Balancing را زیر ذرهبین ببریم.
در دنیای ۰ و ۱ کامپیوترها، منظور از Load Balancing، تقسیم وظایف بین منابع مختلف است! هدف اصلی از انجام چنین کاری، افزایش بهرهوری از تواناییهای سیستم است.
این Load Balancer کاری میکند که قسمتی از منابع سیستم زیر بار زیادی نباشند، آن هم در حالی که دیگر منابع هیچ کاری انجام نمیدهند! انجام این کار باعث بهینهسازی زمان پاسخدهی و بالطبع افزایش سرعت میشود.
به دور از هرگونه پیچیدگی، منظور از کشینگ، کپی کردن صفحاتی است که محتوای ثابتی دارند. به این ترتیب، هربار که کاربری بخواهد از یک صفحه مشابه بازدید کند، نیاز نیست تا منتظر بارگذاری مجدد باشد. در نتیجه این کار، سرعت به میزان قابلتوجهی افزایش پیدا میکند.
بهخاطر همین ویژگی، Nginx یک گزینه بسیار مناسب برای سایتهایی است که صفحات Static (صفحات با محتوای ثابت) زیادی دارند.
3 موردی که بالاتر به آنها اشاره کردیم ، تنها قابلیتهای Nginx نیستند! مواردی که در ادامه آوردهایم هم تواناییهایی هستند که در این نرمافزار همهفن حریف دیده شدهاند:
•پشتیبانی از آخرین نسخه پروتکل اینترنت با نام IPv6
•پشتیبانی از پروتکل دودویی FastCGI همراه با Caching
•پشتیبانی از پروتکل ارتباطی WebSocketsمدیریت فایلهای Static، مرتبسازی فایلها با فهرستسازی، ایجاد فهرست برای فایلها بهصورت خودکار
•پشتبانی از SSL/TLS
مزایای Nginx
اگر بخواهیم مزایا و معایب این وب سرور را روی ترازو بگذاریم، قطعاً کفه آن به سمت مزایا سنگینی میکند. از جمله مهمترین این نقاط قوت، میتوان به موارد زیر اشاره کرد:
•متنباز بودن
•حجم کم که باعث میشود منابع کمتری درگیر وظایف وب سرور شوند
•امکان مدیریت بیش از ۱۰ هزار کاربری که بهصورت همزمان متصل شدهاند. جالب اینکه این کار، با بهکارگیری کمترین منابع ممکن انجام میشود
•مدیریت کارآمد محتواهای Static
•مقیاسپذیری مناسب و رضایتبخش
•داشتن قابلیتهای بسیار در کنار وب سرور بودن
•سادگی و رایگان بودن
•مناسب برای سایتهایی که روی سرور مجازی یا VPS میزبانی میشوند.
•رقیب اصلی یعنی آپاچی، یک جامعه استفادهکنندگان بزرگ دارد که در موقع نیاز یکدیگر را راهنمایی میکنند. Nginx با اینکه استفادهکنندگان بسیاری دارد، اما نمیتوان گفت از این جهت همتراز با Apache عمل میکند و این یکی از نقاط ضعف است! جماعتی که دردی از هم دوا نمیکنند!
•ماژولهای کمتری نسبت به رقیب دارد.
•با اینکه این نرمافزار بهگونهای طراحی شده که با تمام سیستمعاملها سازگاری داشته باشد، اما خب حقیقت اینکه عملکرد آن روی ویندوز خیلی جذاب و قابلتوجه نیست.
نکته قابلتوجه راجع به این نرمافزار اینکه، با توجه به کاربردهای گوناگونی که دارد، نیاز به استفاده از چندین ابزار را از بین میبرد. مثلاً دیگر نیازی نیست بهصورت جداگانه، ابزاری برای Load Balancing داشته باشید. این موضوع باعث صرفهجویی در زمان و انرژی میشود؛ چراکه نیازی نیست هر ابزار را جداگانه راهاندازی و تنظیم کنیم؛ یعنی زمان زیادی ذخیره میشود!
اگر سایت بزرگ و پربازدیدی دارید، Nginx همان وبسروری است که به آن نیاز دارید.