وب سرور Nginx چیست؟
Nginx چیست؟
NGINX (انجین ایکس engine-x) در واقع وب سروری متن باز (Open Source) ، کارآمد و رایگان است. ایده و گسترش آن در سال ۲۰۰۲ و توسط شخصی روس با نام Igor Sysoev صورت گرفت و در سال ۲۰۰۴ برای نخستین بار در سطح عموم منتشر گردید و هم اکنون در حدود ۲۸.۳% از تمامی دامنه های فعال را میزبانی می کند. Nginx به عنوان متعادل کننده بارگزاری یا load balancer ، وب سرور و HTTP cache معروف است. پروژه Nginx از همان ابتدای شکل گیری بر روی کارایی و performance بالا، و استفاده کمتر و بهینه شده از رم کار نمود. ان جین ایکس بر روی سیستم عامل های مختلفی از جمله Linux, OS X, Solaris, AIX, HP-UX و انواع BSD اجرا میشود.اساس توسعه Nginx را میتوان برای خدمت رسانی به محتوای صفحات پویای HTTP بر روی شبکه از طریق FastCGI, SCGI برای اسکریپت ها و سرویس دهنده های نرم افزار WSGI یا ماژول های Phusion و همچنین استفاده به عنوان load balancer معرفی نمود. از موارد مفید این سرور می توان کمترین حد استفاده از حافظه و همچنین کارایی همزمان و بالای آن را نام برد. از این وب سرور میتوان به عنوان پروکسی معکوس با وب سرور Apache استفاده کرد تا همزمان از قدرت آپاچی و سرعت انجین ایکس استفاده کرد همان گونه که سرور ایران در سرویس های هاست لینوکس حرفه ای ایران خود از آن استفاده می کند.
از دلایل معروف بودن Nginx می توان کارایی بالای آن ، پایدار بودن ، دارا بودن ویژگی های مفید و در آخر استفاده پایین از منابع را نام برد.
در رابطه با وب سرور آپاچی یکی از مشکلات بارز , محدود بودن کانکشن ها هم زمان ۱۰۰۰۰ عددی است و این که مصرف حافظه بسیار زیاد دارد.
وب سرور Nginx این مشکل را حل نموده است و انتشار آن بر مبنی لایسنس BSD است. علاوه بر این فایل های استاتیکی را نیز مورد پشتیبانی قرار می دهد.
تاریخچه Nginx
توسعه Nginx توسط Igor Sysoev در سال ۲۰۰۲ اغاز گردید.در جولای سال ۲۰۱۱ شرکت به نام Nginx, Inc در سان فرانسیسکو، کالیفرنیا تغییر شکل داد.این شرکت در واقع یک کمپانی information technology میباشد که نرم افزار های وب سرور را تولید و ارائه میدهد.بر اساس بررسی های Netcraft در اگوست سال ۲۰۱۴ ، nginx به عنوان دومین وب سرور پرطرفدار در سایت های فعال شناخته شد.
در این سیستم استفاده از روش asynchronous event-driven است که باعث شده که به میزان استفاده ثابت از RAM برسیم.
asynchronous event-driven چیست؟
وب سرور ها به طریق مختلفی اقدام به مدیریت درخواست ها (connection) می کنند:
- برای هر درخواست یک process جدید درست می کنند.
- برای هر درخواست یک process جدید درست می کنند در حالی که سیستم connection poll هم دارند که تا مدتی process ها را نگه می دارد و در صورتی که در آن زمان درخواست جدیدی بیاید از process های بیکار استفاده می کنند.
- برای هر درخواست یک thread جدید درست می کنند.
- برای هر درخواست یک thread جدید درست می کنند در حالی که سیستم thread poll هم دارند که تا مدتی thread ها را نگه می دارد و در صورتی که در آن زمان درخواست جدیدی بیاید از thread های بیکار استفاده می کنند.
- یک process همه event ها را مدیریت می کند. (قبول درخواست، پاسخ به کاربر، خواندن داده و … )
- ترکیبات روش ها
Nginx از روش چهارم استفاده می کند به همراه ساخت process برای مجموعه از event ها … البته مقداری مشخص را در config مشخص می کند. همه این ها برای این است که بیشترین استفاده را از سیستم خود بکنیم.
به طور کلی باز کردن process و thread هزینه بر است و از آن مهمتر مدیریت اینهاست. وب سرورهایی شبیه Apache که process و thread هستند با درخواست های زیاد به شدت درگیر مدیریت process و thread می شوند که در نتیجه فشار زیاد تری به سرور می آورند.
ارتباط مستقیمی بین RAM و درخواست ها در این وب سرور ها وجود دارد که در روش nginx تا جای ممکن از استفاده ی اضافه آن جلوگیری شده است.
قابلیت های Nginx
از برخی از ویژگی ها و قابلیت های Nginx میتوان به موارد زیر اشاره نمود:
- قابلیت پشتیبانی و مدیریت بیش از ۱۰,۰۰۰ اتصال همزمان با مصرف رم بسیار پایین
- فابلیت Load balancing
- قابلیت Fault tolerance
- پشتیبانی از OCSP با OpenSSL
- پشتیبانی از FastCGI, SCGI, uWSGI به همراه caching
- سازگار با IPv6
- پشتبانی از پروتکل SPDY
- فشرده سازی و اکسترکت gzip
- باز نویسی URL یا URL rewriting
- قابلیت Bandwidth throttling
- پردازش داده های XSLT
- پشتیبانی از TLS/SSL
- پشتیبانی از STARTTL ها
- احراز هویت با استفاده از سرور HTTP خارجی
امکانات دیگر Nginx
nginx علاوه بر این که یک وب سرور است reverse proxy و e-mail (IMAP/POP3) proxy هم هست … علاوه بر درخواست های http در خواست های مربوط به IMAP و POP3 هم می تواند از امکانات nginx استفاده کند. در این روش شما می توانید از روش ها loadbalancing و چیزهایی از این قبیل برای ایمیل استفاده کنید. البته شما می توانید حتی کارهای عجیب غریبی مثل authentication mail را هم از طریق nginx انجام دهید.
reverse proxy درخواست های بیرونی را به صورت صف شده و جاهای مختلف می فرستد:
- reverse proxy ها موجودی سرور های شما را مخفی می کنند و همه ی دنیا شما را از دریچه reverse proxy می بینند.
- تمام درخواست ها از reverse proxy می گذرد پس جای مناسبی برای firewall ها و … است
- reverse proxy درخواست ها به صورت گسترده ای می تواند پخش کند.
- reverse proxy فشار را با cache کردن محتوای صفحات ثابت می تواند کم کند
- reverse proxy با فشرده سازی محتوای خروجی سرور ها می تواند زمان درخواست ها را کم کرده و پاسخ به درخواست ها را سریع تر کند.
- درخواست ها بین سرور reverse proxy و سرور اصلی به سرعت انجام می شود و connection در reverse proxy باز می ماند و سرور اصلی در گیر نمی شود. ( روش SpoonFeeding )