چنانچه شما یک سرور مجازی (وی پی اس) و یا یک سرور اختصاصی خریداری کرده اید و قصد دارید وب سرور انجین اکس روی آن نصب و راه اندازی کنید ادامه این مطلب برای شما مفید است. همچنین در این آموزش با چند روش جذاب بهینه سازی وب سرور Nginx نیز آشنا خواهید شد. اما قبل از این که به آموزش نصب وب سرور NGINX بپردازیم، لازم است تا ابتدا مقدمه ای ارائه کنیم و بدانیم که اصلا وب سرور NGINX یا انجین اکس چیست؟ در ادامه نیز به آموزش nginx خواهیم پرداخت.
وب سرور NGINX چیست؟
NGINX یا انجین اکس یکی از محبوب ترین وب سرورهای open source است که برای پروتکل های POP3، SMTP، HTTPS، HTTP و IMAP مورد استفاده قرار می گیرد. این وب سرور، بر روی سیستم عامل هایی همچون AIX، HP-UX، OS X، Solaris، ویندوز و لینوکس قابل اجرا است.
از مهمترین مزیت های وب سرور Nginx که موجب محبوبیت آن شده، حجم پایین آن است. حجم پایین وب سرور موجب استفاده کمتر از منابع رم شده و در نتیجه پاسخویی به کاربر در مدت زمان کمتری انجام می شود. وب سرور Nginx برای پاسخگویی به درخواست کاربران و در اختیار دادن اطلاعات، از روش های گوناگونی استفاده می کند.
مهم ترین مزیت Nginx نوع web server حجم پایین آن بوده و به دلیل داشتن این حجم پایین نیز، از رم پایینی استفاده میکند. در نتیجه، در پاسخگویی به کاربر، از سرعت بالایی برخوردار است. وب سرور Nginx نیز مانند تمام وب سرورها، برای پاسخگویی به درخواستهای کاربران و در اختیار قرار دادن اطلاعات به آنها از روشهای گوناگونی استفاده می کند.
Nginx اساسا برای خدمات رسانی به محتوای صفحات پویای HTTP بر روی شبکه تعبیه شده است. به عبارت دیگر NGINX به خاطر داشتن دو قابلیت شهرت پیدا کرده است. اولین قابلیت عملکرد بالا در تعادل بار و دیگری کش محتوای ایستا و پویای صفحات وب است. قبلا در مقاله وب سرور NGINX به معرفی کامل این وب سرور پرداختیم.
به همین دلیل آموزش nginx را بیش از این طولانی نمی کنیم. در ادامه این مقاله آموزش کانفیگ بهینه NGINX و تعیین بهترین روش بهبود کارایی در این وب سرور ارائه شده است. به طوری که بتوانید با سرعت بیشتری به کاربران نهایی خود سرویس دهی کنید. در ادامه با آموزش نصب Nginx و کانفیگ آن با ما همراه باشید.
نحوه نصب و راه اندازی Nginx در اوبونتو
همانطور که در قسمت های قبلی هم اشاره کردیم، وب سرور انجین اکس یکی از محبوب ترین وب سرورها است که برای مدیریت وب سایت های پرترافیک مورد استفاده قرار می گیرد. این وب سرور رایگان بوده و یکی از دلایل محبوبیت آن نیز همین موضوع است. روش کار ساده است و باید ستور نصب apt get را نصب کنید. برای نصب این وب سرور روی اوبونتو طبق مراحل زیر عمل کنید.
در مرحله اول برای نصب Nginx دستورهای زیر را وارد کنید.
sudo apt update sudo apt install nginx
بعد از نصب پکیج فوق، با اجرای دستورات زیر وضعیت Nginx را بررسی کنید:
sudo systemctl status nginx
بعد از بررسی شما، خروجی بایستی به شکل زیر باشد:
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabl>
Active: active (running) since Fri 2020-05-01 22:44:46 CDT; 10s ago
Docs: man:nginx(8)
Main PID: 3361 (nginx)
Tasks: 2 (limit: 4657)
Memory: 3.2M
CGroup: /system.slice/nginx.service
├─۳۳۶۱ nginx: master process /usr/sbin/nginx -g daemon on; master_proces>
└─۳۳۶۲ nginx: worker process
بعد از نصب وب سرور انجین اکس خوب است تا با روش های مدیریت آن نیز آشنا باشید. البته توجه داشته باشید که روش نصب Nginx در توزیع های مختلف لینوکس و در ویندوز متفاوت است. اما روش پیکربندی و به اصطلاح کانفیگ وب سرور Nginx به چه صورتی است؟ در ادامه به نکاتی که ارائه شده است توجه کنید.
آموزش کانفیگ و بهینه سازی وب سرور Nginx
۱- تغییرات Worker
آسان ترین کاری که برای بهبود کارایی این وب سرور می توانید انجام دهید، تنظیم صحیح تعداد Worker ها و تعداد اتصالات است. زمانی که سایتی با ترافیک کم دارید و NGINX، دیتابیس و وب سایت همگی روی یک سرور نصب هستند در فایل /etc/nginx/nginx.conf، فرایند worker را این گونه تنظیم کنید: worker_processes ۱;
در مقابل اگر سایتی دارید که ترافیک آن بالاست یا Instance اختصاصی برای NGINX در نظر گرفته شده است، به هر هسته CPU یک worker اختصاص دهید:
worker_processes auto;
توصیه ما این است که این مقدار را دستی تنظیم کنید. جهت یافتن تعداد فرآیند هایی که سرور می تواند همزمان اجرا کند، از این دستور استفاده کنید:
grep ^processor /proc/cpuinfo | wc -l
۲- اتصالات worker
بیشترین تعداد اتصالاتی که هر فرآیند worker در یک زمان می تواند پردازش کند با گزینه ی worker_connections تنظیم می شود. ۵۱۲، مقدار پیش فرض اتصالات یک worker است. اما معمولا سیستم ها قدرت پردازش بیشتر از این مقدار را هم دارند.
بهترین عدد برای تعداد اتصالات یک worker را تنها با آزمایش کردن به دست می آورید. چون بسته به نوع ترافیکی که سرور NGINX به آن پاسخگویی می کند متغیر است. همچنین محدودیت های هسته سیستم با استفاده از دستور ulimit نیز مشخص می شود:
ulimit -n
این دستور در پاسخ یک عدد به شما بر می گرداند:
۶۵۵۳۶
علاوه بر این شما می توانید، از یک روش اطلاع رسانی رویداد I/O مقیاس پذیر به نام epoll استفاده کنید. با استفاده از این روش در واقع یک تریگر روی رویدادها قرار می دهید که به شما اطمینان می دهد فرآیند های I/O در بهترین سطح توانمندی در حال کار هستند. نهایتا، اگر می خواهید یک worker تمام اتصالات جدید را در یک لحظه بپذیرد از multi_accept استفاده کنید.
تابع events پس از پیکربندی باید این چنین باشد:
events { worker_connections 66536; use epoll; multi_accept on; }
۳- Keep Alive
Keep alive اجازه اتصال مجدد را به مرورگرها می دهد.
keepalive_timeout و keepalive requests کنترل تنظیمات keep alive را انجام می دهند.
sendfile بارگزاری فایل های ثابت از فایل سیستم را بهینه سازی می کند، مثل لوگوی وب سایت ها
tcp_nodelay به سرور NGINX این اجازه را می دهد تا TCP بتواند چندین بافر را به عنوان بسته های مجزا ارسال کند.
tcp nopush مقدار اطلاعاتی را که در یک زمان با فعال سازی گزینه TCP_CORK در پشته ی TCP می توان به سیم فرستاد را بهینه سازی می کند. کار TCP_CORK چیست؟ TCP_CORK هنگامی که ظرفیت یک بسته به حداکثر اندازه ی سگمنت برسد، اطلاعات را بلاک می کند. حال سوال دیگری مطرح می شود که حداکثر اندازه سگمنت چقدر است؟ MMS یا حداکثر اندازه سگمنت برابر است با MTU (حداکثر واحد انتقال) منهای ۴۰ تا ۶۰ بایت اولیه که برای هدر IP است.
keepalive_timeout 65; keepalive_requests 100000; sendfile on; tcp_nopush on; tcp_nodelay on;
۴- اندازه بافر
حافظه بافر به رابط حافظه ای بین دو تا دستگاه و یا سخت افزار هست. بافر برای این استفاده میشه تا تفاوت سرعت بین دو قطعه را جبران کند. اگر اندازه بافر ها خیلی کوچک باشد، سرور NGINX نوشتن را در یک فایل موقت انجام خواهد داد. این کار میزان I/O دیسک را بیش از اندازه بالا می برد.
client_body_buffer size: اندازه ی بافر کلاینت را مدیریت می کند. بیشترین بافرهای کلاینت از روش POST از ارسال ها می آیند. معمولا بهترین انتخاب برای مقداردهی به این متغیر ۱۲۸ کیلو بایت است.
client_max_body_size: حداکثر اندازه بافر بدنه را تنظیم می کند. اگر اندازه در یک درخواست از عددی که ما تنظیم کردیم تجاوز کند، خطای ۴۱۳ (مقدار مورد درخواست بسیار بزرگ است) به سمت کلاینت بازگردانده می شود. معمولا مرورگرها نمی توانند خطاهای شماره ۴۱۳ را به درستی نمایش دهند. اگر به این متغیر مقدار صفر بدهید، امکان چک کردن اندازه بدنه درخواست غیر فعال می شود.
client_header_buffer_size اندازه هدر کلاینت را مدیریت می کند. معمولا یک کیلوبایت، یک انتخاب درست برای این متغیر است که به عنوان مقدار پیش فرض هم در نظر گرفته شده است.
large_client_header_buffers: حداکثر تعداد و اندازه بافرها را برای هدر های بزرگ کلاینت نشان می دهد. در اینجا چهار هدر با چهار کیلوبایت بافر کافی است.
output_buffers: تعداد و اندازه بافرهایی که برای خواندن یک پاسخ از دیسک استفاده می شود را تنظیم می کند. در صورت امکان، انتقال اطلاعات کلاینت تا زمانی که سرور NGINX به کمترین اندازه تعداد بایت خود برای ارسال برسد، به تعویق خواهد افتاد. عدد صفر برای این متغیر به تعویق انداختن انتقال را غیر فعال می کند.
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;
۵- صف اتصال
برخی دستورات در فایل /etc/sysctl.conf برای این که بتوانید اندازه صف لینوکس را برای اتصالات و بسته ها تغییر دهید در اختیار شما قرار داده شده است. بروز رسانی net.core.somaxconn و net.ipv4.tcp_max_tw_buckets اندازه صف اتصالاتی را که منتظر پذیرفته شدن از سمت سرور NGINX هستند را تغییر می دهد. اگر روی هسته لاگ به خطا برخورد کردید اینقدر این مقدار را افزایش دهید تا خطا متوقف شود.
net.core.somaxconn = 65536 net.ipv4.tcp_max_tw_buckets = 1440000
شما به عنوان یک مدیر سرور می توانید با تنظیم max backlog، بسته ها را قبل از پردازش توسط CPU با استفاده از تگ net.core.netdev_max_backlog در کارت شبکه بافر کنید. حتما قبل ازین کار از دفترچه راهنمای کارت شبکه برای یافتن بهترین مقدار برای این متغیر کمک بگیرید.
۶- وقفه ها
وقفه ها نیز شدیدا در افزایش کارایی وب سرور موثر هستند.
client_body_timeout: زمانی که یک سرور منتظر است تا یک بدنه ارسال شود، دستورات را می فرستد.
client_header_timeout: زمانی که یک سرور منتظر است تا هدر یک بدنه ارسال شود، دستورات را می فرستد. این دستورات مسئول کنترل زمان هستند، شاید این سوال برای شما هم پیش آمده است که این دستورات دقیقا چه زمانی را کنترل می کنند؟
زمانی که که یک سرور بعد از دریافت یک درخواست باید برای یک بدنه کلاینت یا هدر کلاینت منتظر بماند تا ارسال شوند. اگر نه بدنه و نه هدر هیچ یک ارسال نشوند، سرور به خطای ۴۰۸ یا “Request time out” بر می خورد.
send_timeout: وقفه پاسخ را به کلاینت اختصاص می دهد. این وقفه روی تمامی انتقالات اعمال نمی شود، اما ترجیحا، تنها بین عمل خواندن دو -کلاینت بعدی اعمال می شود. بنابراین، اگر کلاینت در این بازه زمانی، هیچ داده ای را نخواند، وب سرور NGINX اتصال را قطع می کند.
client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m;
۷- نگهداری محتوای ثابت وب سایت
اگر وب سایت شما دارای محتوای ثابت مثل کد های CSS، جاوا اسکریپت یا تصاویر است، وب سرور NGINX می تواند این فایل ها را برای بازه زمانی کوتاهی در حافظه کش نگهداری کند. اگر قطعه کدی که در زیر مشاهده می کنید را به تنظیمات NGINX اضافه کنید به وب سرور خود دستور می دهید که برای مدت ۳۰ ثانیه ۱۰۰۰ فایل را در حافظه کش نگهداری کند.
فایل هایی را که در مدت ۲۰ ثانیه پیاپی هیچ دسترسی به آنها انجام نشود را از حافظه کش خود بیرون بگزارد و تنها فایل هایی را نگهداری کند که حداقل ۵ بار در این ۳۰ ثانیه مورد درخواست قرار بگیرند. اگر محتوای سایت خود را مرتبا تغییر نمی دهید می توانید این اعداد را بالاتر انتخاب کنید.
open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 5; open_file_cache_errors off;
همچنین شما می توانید توسط یک موقعیت خاص اطلاعات را کش کنید. نگهداری اطلاعات در حافظه کش برای مدت طولانی سودمند است. به خصوص اگر فایل ها جزئی از یک سیستم مدیریت محتوا یا CMS باشند.
location ~* .(woff|eot|ttf|svg|mp4|webm|jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; }
۸- فعال کردن GZIP محتوا
در مورد محتواهای ساده یک وب سایت، وب سرور NGINX می تواند از فشرده سازی GZIP استفاده کند، تا این محتوای فشرده شده را به کلاینت برساند. مرورگرهای وب امروزی، فشرده سازی GZIP را می پذیرند و این کار باعث می شود حجم محتوایی که به صورت متن ساده ارسال شده است به مقدار بسیار زیادی کاهش پیدا کند.
لیستی که در زیر برای شما تهیه شده است، فهرست “امنی” از انواع محتوای قابل فشرده سازی است. حتما دقت داشته باشید فقط فشرده سازی آن دسته از انواعی را که در وب سایت شما استفاده شده است فعال کنید.
gzip on; gzip_min_length 1000; gzip_types: text/html application/x-javascript text/css application/javascript text/javascript text/plain text/xml application/json application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/xml font/eot font/opentype font/otf image/svg+xml image/vnd.microsoft.icon; gzip_disable "MSIE [1-6].";
سخن آخر
در این مطلب سعی کردیم تا به صورت مختصر و مفید به یاداوری چند نکته مهم در خصوص نصب، راه اندازی و بهینه سازی وب سرور Nginx بپردازیم. البته فراموش نکنید که برای بهینه سازی حرفه ای این وب سرور و کانفیگ آن تنها به همین یک آموزش اکتفا نکنید و همیشه دانش خود را با مشورت افراد خبره در این خصوص بروز نگه دارید.
با بهینه سازی وب سرور nginx طبق روش هایی که در بالا گفتیم، می توانید ریکوئست های سرور را بهتر از پیش مدیریت کرده و زمان پاسخ به کاربر را بهبود دهید. برای ارائه خدمات خود به صورت پرسرعت همواره می توانید از سرویس های هاست نامحدود و پرسرعت سرورپارس استفاده کنید. سرورپارس بزرگترین مرجع ثبت دامنه و خرید هاست در کشور. از این که تا پایان مطلب آموزش Nginx با ما همراه بودید، از شما سپاس گزاریم.
دیدگاهتان را بنویسید