Nginx چیست؟
Nginx یک وب سرورopen source و قدرتمند است که از performance بالایی برخوردار می باشد و مسئول رسیدگی به بارگذاری سریع بسیاری از سایت های بزرگ در اینترنت می باشد. وب سرور Nginx خصوصا در مدیریت اتصالات همزمان و ارائه محتوای ثابت خوب عمل می کند. Nginx برای پروتکل های POP3، SMTP، HTTPS، HTTP و IMAP استفاده می شود.
nginx بر روی سیستم عامل های مختلف مانند Solaris ، OS X، HP-UX، AIX و linux و ویندوز همچنین انواع BSD ها قابل اجراست. مهم ترین مزیت این وب سرور حجم پائین آن می باشد که باعث کاهش نیاز به استفاده از ram می شود.
nginx چیست؟
nginx توسط Igor Sysoev به عنوان راه حلی برای مشکل c10k طراحی و ارائه شد. مشکل C10K به مشکلی اشاره می کند که در آن تعداد کانکشن های هم زمان به سرور به ۱۰۰۰۰ می رسد و وب سرور در ارائه ی خدمات به مشکل برخورد می کند. در چنین مواردی حتی آپاچی که وب سرور قدرتمندی بود، توان پاسخگویی به این حجم ترافیک را نداشت.
به طور کلی، اگر بخواهیم که یک وب اپلیکیشن بسیار سریعی را توسعه دهیم، باید سایت خود را به صورت ماژولهایی مستقل از یکدیگر، اما در عین حال مرتبط طراحی کنیم و اینجا است که وب سرور Nginx به خوبی از عهده مدیریت چنین سایتی برخواهد آمد.
nginx سبک، رایگان و open source است که علاوه بر انجام کارهایی که یک وب سرور معمولی مثل آپاچی انجام میدهد، یک سرور Mail Proxy نیز میباشد. علاوه بر اینکه میتوان از آن به عنوان Reverse Proxy نیز استفاده نمود (به طور کلی، منظور از Reverse Proxy نوعی از پروکسی سرور است که منابع مورد نیاز را از یک یا چند سرور مختلف دریافت کرده و در اختیار کاربر قرار میدهد).
استفاده از Reverse Proxy از اهمیت بسزایی در ارتقاء سرعت سایت، برخوردار است، چراکه این نوع نرمافزار حائلی مابین کاربر و سرور اصلی خواهد شد، میزان حجم لود را پخش میکند، محتوا را کش و فشرده میسازد و همچنین فرایند Request/Response ( درخواست/پاسخ ) را به خوبی مدیریت میکند.
ویژگی های nginx
از ویژگی های بارز Nginx می توان به دو مورد زیر اشاره نمود.
- پراسس معکوس
- تعادل بار ( load balancer )
وجود مکانیزم master-worker process model در Nginx یکی از دلایل اصلی می باشد که Nginx را قادر ساخته تا با کارایی بالایی به درخواست های کاربران، پاسخ دهد.
به طور نرمال ما تعداد پردازش کارگرها ( worker processes ) را با تعداد cpu هایی که در اختیار داریم تنظیم می کنیم؛ و Nginx هریک از پردازش ها را به هر cpu هدایت می کند. با این کار می توانیم از مزایای طبیعت چند هسته ای سیستم عامل و کم کردن منابع مصرفی به دلیل switch کردن بین موضوعات مختلف، بهره مند شویم.
در این مقاله در ابتدا Master-Worker Proccess Model را بررسی نموده و در ادامه چند کار ساده را که می توان در سرور nginx انجام داد، بررسی می کنیم.
مدل master-worker در Nginx
زمانی که nginx فعال باشد، بعد از آنکه worker process برای کنترل ساختار درخواستی ارسالی توسط کاربر، استارت می شود، master process به یک چرخه ( loop ) بی پایان وارد می شود; این درحالیست که worker process تنها وارد یک لوپ شده تا درخواست ارسالی کاربر را دریافت و پردازش کند.
با توجه به شکل فوق می توان تعاریف زیر را ارایه نمود
- master process بعد از دریافت درخواست از کاربر ( مانند –s reload، -s stop ) عملکرد هر worker process را با جدا کردن این دستورات ( parsing commands ) کنترل می کند و سپس دستورات متناظری را به هر worker process که در اجتماع پردازش قرار دارند، ارسال می کند.
- هر worker process برای share lock های یکسان رقابت میکنند و تنها worker process ای در رقابت شرکت می کند که بتواند درخواست کاربر را در share lock خود پردازش کند.
- وقتی درخواست یک کاربر ارسال می شود، worker process رویدادی ( event ) را که درخواست شده است را پردازش و در صف پذیرش ( accept queue ) قرار می دهد.
- برای خواندن یا نوشتن رویدادها، رویداد مستقیما بعد از آزاد کردن Lock از صف خواندن و نوشتن خارج می شود. nginx کانکشن درخواستی کاربر ( client ) را که در صف درخواست ( accept queue ) قرار دارد را بعد از اضافه شدن رویداد ( event ) در صف های متناظر با درخواست کابر، با یک share lock کامل می کند .
پیکربندی Starting، Stopping و Reloading
در ادامه قصد داریم تا شیوه استارت کردن، متوقف کردن و بارگذاری مجدد تنظیمات را بررسی نماییم. در این مقاله فرض شده است که nginx نصب شده است.
Nginx دارای یک master process و چندین worker processes است. هدف اصلی master process خواندن و ارزیابی کردن پیکربندی و حفظ worker processes می باشد. Worker processes پردازش های واقعی درخواست ها را انجام می دهند.
Nginx با استفاده از event-based model ومکانیزم وابسته به سیستم عامل اقدام به توزیع موثر درخواست ها در میان worker processes می کند.تعداد worker processes در فایل کانفیگ مشخص شده است. شیوه ای که nginx و ماژول های آن کار می کنند درفایل کانفیگ ( configuration file ) مشخص می شود.به طور پیش فرض این فایل nginx.conf نامیده می شود و در مسیر زیر قرار دارد.
/usr/local/nginx/conf, /etc/nginx, or /usr/local/etc/ngin
برای استارت کردن nginx فایل اجرایی را اجرا می کنیم. بعد از آن که nginx استارت شد، nginx با استناد کردن به s-parameter قابل کنترل است. در این راستا می توانیم از ساختار دستور زیر استفاده نماییم:
nginx -s signal
سیگنال می تواند یکی از موارد زیر باشد:
- stopstop - fast shutdown
- quitquit - graceful shutdown
- reload reload- reloading the configuration file
- reopen reopen- reopening the log files
به عنوان مثال، برای متوقف کردن پردازش های nginx، command زیر ، مورد استفاده قرار گیرد:
nginx -s quit
این command باید توسط userای اجرا شود که nginx را استارت کرده است.
تغییرات configuration file تا زمانی که command زیر اجرا نشود، اعمال نمی گردد.
nginx -s reload
جمع بندی
Nginx و apache دو وب سرور قدرتمند می باشند. با این حال هریک از آنها معایبی نیز دارند. به طور مثال آپاچی میزان مصرف memory را بالا می برد. nginx نیز( مناسب برای فایل های استاتیک ) برای پردازش محتوای پویا به کمک php-fpm نیاز دارد. ترکیب این دو وب سرور تاثیر قابل توجهی در کیفیت و سرعت لود request ها ایجاد می نماید. بدین صورت که nginx در قسمت front وب سرور مسئول رسیدگی به درخواست های استاتیک می شود، در همین حال آپاچی در قسمت backend در حال پردازش می باشد.
امیدواریم این مقاله برایتان مفید واقع شده باشد. اگر سوالی دارید که در این مقاله پاسخش را پیدا نکردید، در قسمت کامنت ها سوال خود را مطرح کنید، کارشناسان ما در کمتر از چند دقیقه به سوالات پاسخ خواهند داد.
این مقاله را با دوستان خود به اشتراک بگذارید.
موفق باشید.