در این بخش از سری مطالب آموزش Nginx در وبلاگ آذرآنلاین به درخواست کاربران گرامی با آموزش بهینه سازی Nginx (بخش اول) خدمت شما خواهیم بود تا بتوانید با رعایت و تنظیم چندین بخش ، بهترین کارایی را از Nginx داشته باشید.
Nginx به دلیل دو قابلیت متفاوت با سایر وب سرورها شهرت پیدا کرده است.
1- قابلیت عملکرد زیاد در تعادل بار
2- کش خودکار محتوای ثابت و پویای صفحات وب
حال در این مطلب ( بهینه سازی Nginx (بخش اول) ) قصد داریم به تنظیم و تغییر برخی فرآیندها پرداخته تا بتوان از این دو قابلیت به بهترین شکل استفاده نمود.
با بخش اول بهینه سازی Nginx همراه ما باشید.
بهینه سازی Nginx (بخش اول)
-
تغییرات Worker در Nginx
ابتداییترین کاری که برای بهبود کارایی Nginx میتوان انجام داد ، تنظیم صحیح تعداد Workerها و اتصالات آن میباشد.
در شرایطی که سایتی با ترافیک کم و یا متوسط رو به پایین دارید و Nginx ، بانک اطلاعاتی و سایر نرمافزارهای متمرکز بر روی وب سرویس ، بر روی یک وب سرور هستند ، بهتر است Worker را به شکل زیر تنظیم کنید.
- ابتدا با دستور زیر فایل تنظیمات Nginx را باز نمایید.
vi /etc/nginx/nginx.conf
- سپس مقدار worker_proccess را به 1 تغییر دهید.
پس از تغییر عبارت Worker_process از مقدار Auto به 1 باید تغییر یابد.
- در صورتی که یک سایت با ترافیک بالا دارید ، شما باید تعداد Workerها را به تعداد هستههای CPU خود افزایش دهید تا بهترین کارایی را دریافت نمایید.
برای این امر دستور زیر را وارد کرده تا تعداد فرآیندهایی که CPU شما میتواند به صورت همزمان انجام دهد را مشاهده نمایید.
grep ^processor /proc/cpuinfo | wc -l
- پس از دریافت عدد تعداد فرآیند همزمان ، شما باید عدد دریافتی را به جای عدد 1 که در بخش اول توضیح داده شد ، جایگزین نمایید.
-
اتصالات Worker در Nginx
بیشترین تعداد اتصالاتی که Worker میتواند به صورت همزمان میتواند انجام دهد را تعداد اتصالات Worker میگویند. این مقدار در فایل تنظیمات nginx ، با عبارت Worker_Connections نمایش داده میشود و عموماً 512 کانکشن برای هر Worker به صورت پیشفرض در نظر گرفته شده است.
- حال برای بهینهسازی این امر ابتدا باید دستور زیر را وارد کرده تا میزان محدودیت هسته سرور خود را مشاهده نمایید.
ulimit -n
دستور بالا خروجی مشابه زیر خواهد داشت.
4096
- بدین ترتیب شما متوجه خواهید شد که میتوانید به جای عدد 512 که برای Worker_conncetion تنظیم شده است ، عدد 4096 را جایگزین نمایید ، اما بهتر است برای اینکه این امر به بهترین نحو صورت گیرد ، از متدی دیگر که توسط سایت Nginx ارائه شده استفاده نمایید.
بنابراین در فایل تنظیمات Nginx ، بهتر است عبارت زیر را جایگزین Worker Connection نمایید.
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
با استفاده از تابع فوق ، Nginx میتواند با سرعتی بالا ، تمامی اتصالات را به Worker داده و از حد نهایت سرعت آن در این بخش استفاده نمایید.
-
بهینه سازی Keep Alive در Nginx
در مطالب قبلی بارها در مورد Keep Alive و نحوه عملکرد آن توضیح داده شده است اما در یک توضیح کوتاه میتوان گفت که Keep Alive اجازه اتصال مجدد را به مرورگرها داده تا سرعت جستجو در یک سایت افزایش یابد.(معرفی کامل KeepAlive)
تنظیم Keep Alive در Nginx دارای پارامترها جذاب و متفاوتی است که تمامی آنها در فایل Nginx.conf قرار دارند.
بخشهای مختلف Keep Alive در فایل nginx.conf به شکل زیر خواهد بود.
keepalive_timeout 60;
keepalive_requests 100000;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
حال برای درک بهتر این موارد ، به توضیحات زیر توجه فرمایید.
Keepalive_timeout و keepalive_requests کنترل اصلی تنظیمات Keep Alive را انجام میدهند.
SendFile جهت لود فایلهای ثابت از فایل سیستم را بهینهسازی و سرعت میبخشد. (مانند لوگو سایت)
tcp_nodelay به وب سرور Nginx این دسترسی را میدهد که بستههای TCP را بتواند با چندین بافر و در بستههای مجزا ارسال نماید.
tcp_nopush مقدار اطلاعاتی را که در یک زمان با فعال سازی گزینه TCP_CORK در یک استک TCP میتوان بر روی ارتباط ارسال کرد را بهینهسازی مینماید.
-
تنظیمات بافر
بافر بخشی از حافظه است که دادهها قبل و بعد از تراکنش در آن قرار گرفته و در صف پردازش و تبدیل به اطلاعات قرار میگیرند ، بنابراین برای تنظیم بافر باید به سرعت هارددیسک ، ترافیک سایت و حجم اطلاعات سایت نگاه کرد و سپس به تنظیم هر یک از پارامترها پرداخت.
پارامترهای موجود برای تنظیمات بافر در فایل nginx.conf به شکل زیر میباشند.
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
output_buffers 1 32k;
postpone_output 1460;
حال برای درک بهتر این پارامترها به توضیحات زیر توجه فرمایید.
client_body_buffer_size اندازه بافر کلاینت را مدیریت کرده و معمولا بهترین انتخاب برای مقداردهی به این متغیر ۱۲۸ کیلوبایت است.
client_max_body_size حداکثر اندازه بافر بدنه را تنظیم میکند. اگر اندازه در یک درخواست از عددی که تنظیم شده تجاوز کند، خطای ۴۱۳ به سمت کلاینت بازگردانده میشود که معمولا هم مرورگرها نمیتوانند خطاهای شماره ۴۱۳ را به درستی نمایش دهند. اگر به این متغیر مقدار صفر بدهید ، امکان چک کردن اندازه بدنه درخواست غیرفعال میگردد.
client_header_buffer_size اندازه هدر کلاینت را مدیریت میکند. معمولا یک کیلوبایت یک انتخاب درست برای این متغیر است که به عنوان مقدار پیشفرض هم در نظر گفته شده است.
large_client_header_buffers حداکثر تعداد و اندازه بافرها را برای هدرهای بزرگ کلاینت نشان داده که در اینجا چهار هدر با چهار کیلوبایت بافر کافی میباشد.
output_buffers تعداد و اندازه بافرهایی که برای خواندن یک پاسخ از دیسک استفاده میشود را تنظیم کرده و در صورت امکان ، انتقال اطلاعات کلاینت تا زمانی که سرور Nginx به کمترین اندازه تعداد بایت خود برای ارسال برسد را به تعویق خواهد انداخت. عدد صفر برای این متغیر به تعویق انداختن انتقال را غیر فعال مینماید.
پایان بخش اول
به این شکل شما قادر خواهید بود به بهینه سازی Nginx خود پرداخته و از سرعت و عملکرد مطلوبتر آن بهره ببرید.
بزودی سایر بخشهای بهینه سازی Ngnix منتشر خواهد شد.
جهت مشاهده سایر مطالب آموزش بهینهسازی Nginx به لینکهای زیر مراجعه نمایید.
آموزش بهینه سازی Nginx (بخش دوم)
آموزش بهینه سازی Nginx (بخش سوم)
آموزش بهینه سازی Nginx (بخش چهارم)
امیدواریم در پایان از بهینه سازی Nginx (بخش اول) استفاده لازم را برده باشید.
کاربر گرامی شما میتوانید سؤالات مربوط به این آموزش را در بخش کامنتها عنوان کرده و در همین قسمت پاسخ خود را دریافت کنید و یا برای رفع مشکلات دیگر در زمینه آموزشهای آذرآنلاین به بخش Community مراجعه کرده و مشکل خود را در آن مطرح نمایید تا در اسرع وقت کاربران دیگر و کارشناسان به سؤالات شما پاسخ دهند.