نحوه بهبود عملکرد سرور nginx

477

 

 

Nginx یک سرور بسیار سریع، قوی، سبک و با کارایی بالا است. که حداقل 40٪ از پربازدیدترین وب‌سایت‌های دنیا بر روی آن هستند. به دلیل تطبیق پذیری Nginx ، از آن به عنوان یک متعادل کننده لود سایت، پروکسی معکوس و سرور کش HTTP استفاده می‌گردد.

بهترین ویژگی Nginx سرعت آن است که باعث می شود هزاران اتصال همزمان را به راحتی اداره کند.

در این مقاله ما به بهترین و عملی‌ترین راه‌ها برای بهبود عملکرد سرور Nginx می‌پردازیم.

موارد مورد نیاز شما:

  • یک VPS لینوکسی
  • پیش زمینه‌ای درباره پیکربندی Nginx
  • یک سرور نصب شده Nginx

بهینه سازی و بهبود عملکرد Nginx شامل تغییر تعداد پارامتیر در فایل /etc/nginx/nginx.conf. می باشد که مربوط به پیکربندی Nginx است.

توصیه ما این است که قبل از انجام هر تغییر در فایل پیکربندی Nginx خود یک بک‌آپ از آن تهیه کنید و تغییراتی که در این مقاله به آن پرداخته می‌شود را یکی کی تست نمایید و بعد از هربار تغییر در پیکربندی یکبار آن را ذخیره و سرور خود را راه‌اندازی مجدد نمایید. اگر در این فرایند بهبودی مشاهده ننمودید، بهتر است مقادیر تغییر داده شده را به حالت اولیه بازگردانید.

1. فرایندهای Worker

فرایند‌های Worker به تعداد Workerهایی اطلاق می‌گردد در سرور شما توسط Nginx فراخوانی شده‌اند. پیشنهاد ما این است که به ازای هر هسته پردازنده یک فرایند Worker داشته باشید. توجه داشته باشید که اگر مقداری که قرار می‌دهید بیشتر از تعدا هسته‌های پردازنده سرور یا VPS شما باشد. باعث می‌شود که پردازنده‌ها در حالت IDLE یا بیکار پردازش بیشتری انجام دهند.

به صورت پیشفرض تعداد فرایند‌های Worker به صورت اتوماتیک تنظیم شده است.

اگر نمی‌دانید که تعداد هسته‌های پردازنده سرور یا VPSتان چقدر است از کامند زیر می توانید استفاده نمایید.

 

 

همانطور که مشاهده می‌کنید VPS ما دارای یک هسته است پس بهتر است تعداد Workerها را یک عدد قرار دهیم.

و برای نوشتن در فایل کانفیگ باید آن را باید به صورت:

 

 

اما اگر زمانی احساس کردید که ترافیک Nginx سرورتان افزایش یافته بهتر است. سرور خود را ارتقا دهید و تعداد فرایند‌های Worker را افزایش دهید.

2. ارتباط Workerها

اتباطات Workerها، تعداد کلاینت‌هایی است که به صورت همزمان توسط یک سرور Nginx قابل ارائه است.و زمانی که این بخش با فرایند Worker ترکیب می‌شود. به حداکثر تعداد کلاینت‌های دست پیدا خواهیم کرد که توسط سرور قابل ارائه است، برای این منظور:

 

به صورت پیش فرض این تعداد برابر با 768 می‌باشد.

البته باید در نظر داشت که در حالت عادی یک مرورگر در آن واحد دو کانکشن بایک سرور باز می‌نماید. بنابراین می‌توان تعداد را به نصف کاهش داد.

برای به حداکثر رساندن پتانسیل کامل Nginx ، hvjfhxhj Worker باید روی حداکثر تعداد فرآیندهای مجاز، که توسط هسته در یک زمان اجرا می شود تنظیم گردد. این معادل تعدادی است که می‌توانید با دستور زیر بدست آورید:

در VPS ما مقدار پردازش به 1024 گردازش نحدود گشته است. پس بهتر است که تعداد اتصالات Worker را با دستور زیر به 1024 عدد برسانیم:

 

 

برای محاسبه تعداد کلاینتی هایی که در هر ثانیه می‌توانند مدیریت شوند می‌توان از دستور زیر استفاده نمود:

3. Multi Accept

Multi Accept به معنای آن است که یک فرایند Worker ارتباطات جدیدو کانکشن‌هی جدید را قبول می‌نماید.

به صورت پیفرض این مقدار در حالت off قرار دارد و در زمان یک کانکشن را قبول می‌کند.

و اگر این متغیر در حالت on قرارگیرد باعث می‌شود که فرایند Worker تمام ارتباطات جدید را قبول نماید.

Multi Accept باید به صورت زیر در این حات قرار گیرد:

 

4. فشرده سازی Gzip

فشرده سازی ریسپانس‌های(پاسخ‌های) کلاینت باعث استفاده از پهنای باند شبکه و کاهش زمان بارگذاری صفحه برای کانکشن‌های کندتر می‌گردد،  لازم به ذکر است که فرآیند فشرده سازی به خودی خود منابع دستگاه را مصرف می‌کند از این رو باید نسب سود فشرده سازی را آنالیز و ارزیابی کنید. در غیر این صورت ، فشرده سازی ممکن است به ضرر شما باشد و عملکرد nginx را کاهش دهد. پیاده سازی فشرده سازی به شرح زیر است:

  • فشرده سازی Gzip را برای محتواهایی مانند CSS، متن، فایل‌های جاوا اسکریپت و … فعال نمایید
  • فشرده سازی را برای انواع مختلف فایل‌ها تست کنید و عملکرد را بررسی نمایید
  • سطح فشرده سازی را افزایش ندهید، زیرا باعث مصرف توان پردازنده می‌گردد و از آن طرف سود زیادی به همراه ندارد.

 

یک پیکربندی سمپل برای Gzip به صورت زیر است.

 

 

5. بافرها

بافرها نقش بسزایی در بهبود عملکرد Nginx دارند، در ادامه متغیرهایی را به شما نمایش می‌دهیم که با تغییر آن‌ها عملکرد را افزایش دهید.

client_body_buffer_size  که نقش مدیریت بافر کلاینت را به عهده دارد، مانند عملکرد POST، ارسال فرم‌ها که به سرور Ngnix می‌رسند. پیشنهاد ما قرار دادن این متغیر به اندازه 10K می‌باشد.

client_header_buffer_size  همانند متغیر بالا است اما بافرهای سمت هدر کلاینت را مدیریت می‌نماید. پیشنهاد ما قرار دادن این متغیر برابر با 1K می‌باشد.

client_max_body_size این متغیر می‌گوید که حجم درخواست یک کلاینت چقدر می‌تواند باشد. اگر این مقدار از مقدار گفته شده افزایش یابد Nginx ارور 413 می‌دهد.

large_client_header_buffers  حداکثر مقدار برای هدر یک کلاینت.

مقدار پیشنهاد و نحوه پیکر بندی این متغیرها به صورت زیر می‌باشد.

6. Timeouts

Timeoutهای موقت واقعاً عملکرد سرور nginx را به میزان قابل توجهی بهبود می‌بخشند. کانکشن‌های نگهدارنده باعث کاهش مصرف cpu و سربار شبکه می‌شود که برای ایجاد و بستن یک کانکشن مورد نیاز است. در زیر متغیرهایی هستند که برای بهتر کردن عملکرد باید دوباره تنظیم شوند:
client_header_timeout & client_body_timeout – زمانی که سرور nginx منتظر می‌ماند تا هدر یا بدنه یک کلاینت ارسال گردد.

keepalive_timeout  مدت زمانی که یک کانکشن نگهدارند باز می‌ماند. و پس از آن Nginx سرور ارتباط را می‌بندد.

send_timeout  تایم‌اوتی که شامل ارسال جوابی به کلاینت می‌باشد سپس اگر کلاینت نوتاند جواب را دریافت کند، سرور Nginx کانکشن را قطع می‌نماید.

مقادیر زیر پیشنهادی ما برای متغیرهای بالا هستند.

7. لاگ‌ها

می‌دانیم که ذخیره لاگ‌ها و اطلاعات این چنینی به ما کمک می‌کند ایرادات سیستم را متوجه شویم و عیب یابی نماییم، اما ذخیره این حجم عظیم دیتا باعث مصرف شدن منابع سخت افزاری ما می‌شود. در Nginx عر ورود را ثبت می‌کند و برای همین امر مقدار زیادی از قدرت پردازنده استفاده می‌شود. برای حل این موضوع دو راه وجود دارد:
1. غیرفعال کردن کامل Logها به صورت زیر:

2. اگر نیاز مبرمی به لاگ‌های خود دارید، می‌توانید access-log buffering را روشن نمایید. این عمل باعث میشود که سرور Nginx شما لاگ ها و ورودها را یکی یکی ذخیر نکند، بلکه آنها را در دسته‌های یزرگتری باهم ذخیره می‌نماید.

جمع بندی:

زمانی که وب سروس Nginx خود را بهینه نمودید. قدم بعدی مانیتور و بررسی آن در شرایط گوناگون مانند ترافیک و فاکتورهای دیگری است که برای سرور پیش می‌آید. بنابراین مقادیر توصیه شده بهترین متغیرها نیستند و برای شرایط متنوع این متغیرها متفاوت‌اند. و شما می‌توانید در شرایط ترافیک کم یا متوسط متغیرها رو به صورت آهسته افزایش دهید. اگر افزایش در میزان بهره‌وری مشاهده نکردید بهتر است آن متغیر را در حالت پیش فرض قرار دهید.

 

 

 

 

 

Saman Yazdannikمشاهده نوشته ها

Avatar for Saman Yazdannik

laus Deo

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *