امروزه با توجه به وابستگی اغلب شیوههای کسبوکاری به فرایندهای سایتی، بهینه سازی وب سرور Nginx میتواند در میان روندهای محبوب و مبهم قرار بگیرد. در واقع علت اصلی این موضوع، محبوبیتی است که وب سرور Nginx در میان کاربران پیدا کرده است.
در چنین شرایطی، آشنایی با فرایند بهینه سازی وب سرور Nginx، میتواند کمک بزرگی در راستای بهبود عملکرد وب سرور به شمار آید. از این رو در ادامه این مطلب به ارائه توضیحات بیشتری در رابطه با چیستی بهینه سازی وب سرور Nginx و فرایند مربوط به این بهینه سازی، خواهیم پرداخت.
بهینه سازی وب سرور Nginx چیست؟
اولین سوالی که ذهن اغلب افراد را در زمینه بهینه سازی وب سرور درگیر خود میکند، در رابطه با چیستی این فرایند و نتیجه حاصل از آن است! در واقع باید گفت که بهینه سازی وب سرور انجین ایکس، یک فرآیند فنی خاص است که جهت بهبود کارایی پردازش داده و پیکربندی برنامه استفاده میشود.
در نتیجه افراد میتوانند با بهینه سازی وب سرور Nginx، سبب عملکرد هر چه بهتر این مسیر ارتباطی سرور و مرورگر شوند تا به این وسیله فرایندهای مربوط به پردازش دادهها با سرعت بالا و مناسب صورت بگیرد. به خصوص که این وب سرور در میان انواع محبوب جهت پاسخگویی، معرفی و شناخته میشود.
بخش اول فرایند بهینه سازی وب سرور Nginx
با توجه به اینکه وب سرور Nginx دارای قابلیتهای ویژهای است که سبب تمایز آن از دیگر انواع وب سرورها میشوند، با بهینه سازی Nginx در راستای تغییرات Worker در Nginx، میتوان میزان بهره برداری از قابلیتهای این وب سرور را افزایش داد.
-
تنظیم صحیح تعداد Workerها
جهت بهینه سازی Nginx، میتوان ابتدا به تنظیم صحیح تعداد Workerها و اتصالات آن پرداخت. برای اینکار نیاز به طی نمودن یک مسیر ساده مطرح خواهد بود. به این منظور در وهله اول لازم است از طریق دستور ” vi /etc/nginx/nginx.conf ” وارد فایل تنظیمات Nginx شوید و مقدار worker_proccess را به 1 تغییر دهید. البته باید توجه داشته باشید که تغییر عدد workerها لازم است با توجه به تعداد هستههای CPU صورت بگیرد.
-
اتصالات workerها
در ادامه میتوانید اتصالات workerها را هم وارد فرایند بهینه سازی نمایید. به این منظور میتوانید از طریق دستور ulimit -n میزان محدودیت هسته سرور خود را مشاهده نموده و در بخش Worker_conncetion، عدد 4096 را جایگزین 512 نمایید.
در این روند حتی میتوانید عبارت:” events {worker_connections 4096;use epoll;multi_accept on;} ” را جایگزین Worker Connection نمایید. در این صورت سرعت وب سرور Nginx تا حد بسیار زیادی افزایش پیدا میکند.
-
بهینه سازی Keep Alive
فرایند دیگری که در بحث بهینه سازی وب سرور Nginx مطرح میشود، در رابطه با بهینه سازی Keep Alive در Nginx است که در فایل nginx.conf، میتوانید تنظیمات مربوط به این مورد را تحت بررسی قرار دهید.
در فایل nginx.conf، بخشهای مختلف کنترلی مربوط به Keep Alive قرار میگیرد که میتواند شامل Keepalive_timeout، keepalive_requests، SendFile، tcp_nopush و tcp_nodelay باشد. هر یک از مسیرها جهت تنظیم و اعمال فرایندهای به خصوصی مورد فعالیت قرار میگیرند.
-
تنظیمات بافر
تنظیمات بافر، قسمت دیگری از فرایند مربوط به بهینه سازی وب سرور Nginx است که این مورد هم در فایل nginx.conf تعریف شده است. تنظیمات بافر به مولفههایی چون سرعت هارددیسک ، ترافیک سایت و حجم اطلاعات سایت بستگی پیدا میکند.
علت این موضوع، مربوط به نوع عملکردی است که برای تنظیمات بافر مطرح میشود. در واقع بافر بخشی از حافظه است که دادهها را در خود نگهداری میکند. با تنظیم این بخش از فایل nginx.conf، میتوانید فرایند بهینه سازی Nginx را به طور کامل به اجرا برسانید.
به این منظور لازم است پارامترهای مختلفی را در جریان تغییرات وارد نمایید. client_max_body_size، large_client_header_buffers، output_buffers و client_header_buffer_size، نمونههایی از پارامترهای مذکور هستند که نیاز به اعمال تغییرات دارند.
بخش دوم فرایند بهینه سازی وب سرور Nginx
ادامه فرایند بهینه سازی وب سرور Nginx، در قالب بخش دوم قابل توضیح و بررسی است. بنابراین جهت تکمیل فرایند بهینه سازی، لازم است مراحل مذکور در این قسمت را هم پشت سر بگذارید.
-
تغییر صف اتصال در فایل کانفیگ Nginx
تغییر صف اتصال در فایل کانفیگ Nginx، از جمله روندهایی است که جهت بهینه سازی وب سرور Nginx مطرح میشود. صف اتصال در فایل کانفیگ Nginx قرار دارد و از طریق تغییر دو متغیر در این فایل، تغییر آن امکان پذیر است. موضوعی که در رابطه با این بخش مطرح میشود، مربوط به امکان تغییر عدد در صورت مشاهده خطای سیستمی در لاگ Nginx است.
در این صورت امکان پیشگیری از خطا فراهم آورده میشود. به طوری که در صورت مشاهده خطا سیستمی، لازم است متغیر عددی عبارات:
net.core.somaxconn = 65536
net.ipv4.tcp_max_tw_buckets = 1440000
را در فایل کانفیگ Nginx افزایش دهید. در این حالت قادر به جلوگیری از بروز خطا خواهید بود.
-
به کارگیری قابلیت Gzip در Nginx
به کارگیری قابلیت Gzip در Nginx، از دیگر فرایندهایی است که در بحث بهینه سازی وب سرور Nginx مطرح میشود. این قابلیت با هدف افزایش سرعت لود سایت مورد بهره گیری قرار میگیرد. به طوری که با استفاده از Gzip میتوان تمامی فایلهایی که قابلیت فشرده سازی دارند را فشرده کرد.
در این حالت حجم فایلها کاهش یافته و در نتیجه سرعت افزایش مییابد. در نتیجه جهت اجرای قابلیت Gzip در وب سرور Nginx، میتوانید کدهای زیر را در فایل کانفیگ Nginx تعریف کنید تا قابلیت مذکور برای شما عمل کند:
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]\.”;
از آنجایی که سرعت لود سایت، در میان مهمترین مسائل مربوط فعالیت آن قرار میگیرد، لازم است به قابلیت Gzip توجه ویژهای داشته باشید. چرا که در حالت کلی افزایش سرعت، یکی از اصلیترین اهداف بهینه سازی وب سرور Nginx است. البته این موضوع را هم در نظر بگیرید که قابلیت Gzip تنها مسیر جهت افزایش سرعت سایت نیست. بلکه مولفههای موثر دیگری هم وجود دارند.
-
تنظیم وقفهها در Nginx
تنظیم وقفهها در Nginx، از جمله مولفههای دیگری است که سرعت عملکرد سایت را تحت تنظیم خود قرار میدهد. Client_body_timeout و Client_header_timeout، از جمله متغیرهای کنترل زمان هستند. به طوری که تعریف زمان جهت انجام یک فرایند توسط کاربر و ارسال خطای Request time out در صورت پایان زمان، به واسطه این متغیرها انجام میشود.
همچنین لازم به ذکر است که متغیر دیگری با عنوان Send_timeout در این قسمت قرار میگیرد که زمان درخواست را تعیین میکند. این متغیرها همگی با سرعت سایت در ارتباط هستند و تاثیر مستقیمی در عملکرد آن دارند. به همین دلیل فرایند بهینه سازی وب سرور Nginx، تا حد زیادی به این موارد بستگی پیدا میکند.
بخش سوم فرایند بهینه سازی وب سرور
قسمت دیگری که در فرایند بهینه سازی وب سرور مطرح میشود، در قالب بخش سوم قابل توضیح است. در این قسمت هم میتوان مولفههای متفاوتی را مطرح نمود که هر کدام تاثیر متفاوتی در روند بهینه سازی دارند. لازم به ذکر است که دستورات این بخش در فایل sysctl.conf تعریف شده است.
-
تنظیم پورتهای موقت
تنظیم پورتهای موقت یکی از مولفههایی است که در بخش سوم فرایند بهینه سازی مطرح میشود. این مورد مربوط به زمانی است که از یک وب سرور Nginx به عنوان یک پروکسی سرور استفاده شود. در رابطه با این متغیرها، لازم به ذکر است که تنظیمات در فایل limits.conf اعمال میشوند.
-
تنظیم توصیفگرهای فایل
تنظیم توصیفگرهای فایل، جهت تنظیم اتصالات و فایلهای باز، میتواند در قالب دیگر موارد مربوط به فرایند بهینه سازی وب سرور Nginx قرار بگیرد. این مورد هم مانند هر متغیری که مربوط به بخش سوم است، در فایل sysctl.conf قرار گرفته است. لازم به ذکر است که این تنظیمات برای سیستمی که به تعداد بالایی از اتصالات پاسخگویی میکند، ضروری است.
-
قطع اتصال به پاسخ مشتریهای از دست رفته
قطع اتصال به پاسخ مشتریهای از دست رفته به واسطه وارد کردن کد ” reset_timedout_connection on; ” در فایل sysctl.conf، میتوانید سبب آزاد شدن حافظه اختصاص داده شده به سوکت شوید.
علاوه بر موارد ذکر شده برای بخش سوم فرایند بهینه سازی وب سرور Nginx، گزینههای جمعآوری بستهها قبل از رها شدن و نیز اندازه پنجره TCP، در میان فرایندهای مذکور قرار میگیرند که میتوانند روی عملکرد وب سرور اثر بگذارند.
بخش چهارم فرایند بهینه سازی وب سرور Nginx
پایان مسیر بهینه سازی با اعمال تنظیمات بخش چهارم همراه خواهد بود که شامل فرایندهای لاگ گیری خطاها، لاگ گیری شرطی، غیرفعال کردن کلی لاگ گیری و نظارت بر فعالیتهای سرور میشود.
-
لاگ گیری خطاها
لاگ گیری خطاها که در فایل Nginx.conf قرار میگیرد، جزء مراحل مهمی است که در رابطه با بهینه سازی وب سرور Nginx، حتما باید مورد توجه قرار بگیرد. در رابطه با لاگ گیری خطاها، دو پارامتر اصلی logs/error.log و Error_log به منظور تعیین مکان قرارگیری فایل لاگ تنظیم میشوند.
به طوری که با تغییر یک متغیر در کد تعریف شده در فایل Nginx.conf، میتوان سطح لاگ گیری را به طور دلخواه و یا بسته به نیاز تغییر داد. در این صورت امکان دریافت اطلاع از وضعیت سرور، بسته به تغییرات اعمال شده مطرح خواهد شد.
-
لاگ گیری شرطی
لاگ گیری شرطی از دیگر فرایندهای مربوط به بهینه سازی وب سرور است که از آن میتوان در صورت نیاز برای لاگ گیری از درخواستهای خاص، بهره گرفت.
-
غیرفعال کردن کلی لاگ گیری
غیرفعال کردن کلی لاگ گیری مربوط به زمانی است که مدیر سرور از روش جایگزین دیگری برای لاگ گیری استفاده میکند. در این حالت میتوان از دستور “server { listen 80; server_name example.com; access_log off; error_log off; } ” جهت غیرفعال کردن کلی لاگ گیری بهره گرفت.
-
نظارت بر فعالیتهای سرور
نظارت بر فعالیتهای سرور متغییری است که فعال کردن آن روی سرور میتواند به مدیران جهت مشاهده بلافاصله پاسخهای JSON، کمک کند.
در حالت کلی با اعمال فرایندهای مربوط به بهینه سازی وب سرور Nginx، میتوان تا حد زیادی به عملکرد هر چه بهتر و سریعتر سایت کمک کرد. به خصوص که فعالیت سایت تا حد زیادی به این مولفهها بستگی پیدا میکند.
نمونه فایلهای افزایش کارایی سرور
سایت رسمی Nginx با ارائه نمونههایی از فایل nginx.conf، فایل sysctl.conf و فایل limits.conf، پیکر بندی ایدهآلی را مطرح نموده است؛ اما باید در نظر داشت که این نمونهها به عنوان قالب کلی مطرح میشوند و مواردی مانند Workerها و یا سایر موارد پردازشی، لازم است نسبت به قدرت سرور تنظیم شوند.
-
فایل sysctl.conf
net.core.somaxconn = 65536
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 3240000
-
فایل limits.conf
soft nofile 4096
hard nofile 4096
- فایل nginx.conf
pid /var/run/nginx.pid;
worker_processes 2;
events {
worker_connections 65536;
use epoll;
multi_accept on;
http {
keepalive_timeout 65;
keepalive_requests 100000;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
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_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
gzip on;
gzip_min_length 1000;
gzip_buffers 4 4k;
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]\.”;
# [ debug | info | notice | warn | error | crit | alert | emerg ]
error_log /var/log/nginx.error_log warn;
log_format main ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
‘”$gzip_ratio”‘;
log_format download ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
‘”$http_range” “$sent_http_content_range”‘;
map $status $loggable {
~^[23] 0;
default 1;
server {
listen 127.0.0.1;
server_name 127.0.0.1;
root /var/www/html;
access_log /var/log/nginx.access_log main;
location /
proxy_pass http://127.0.0.1/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /etc/nginx/proxy_temp;
location ~* .(woff|eot|ttf|svg|mp4|webm|jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;