بهینهسازی کارایی Nginx: تیونینگ و کشینگ برای سرعت بیشتر سایت
نصب پیشفرض Nginx برای اکثر سایتها کار میکند، اما با تنظیمات پیشفرض، از توان واقعی سرور شما استفاده نمیشود. اگر Nginx خود را طبق پشتهٔ LEMP نصب کردهاید، در این راهنما یاد میگیرید چطور با چند تنظیم کلیدی، سرعت پاسخدهی آن را بهطور محسوسی افزایش دهید.
Worker Processes و Worker Connections
این دو مقدار تعیین میکنند Nginx چند درخواست همزمان را میتواند پردازش کند:
worker_processes auto;
events {
worker_connections 4096;
multi_accept on;
}worker_processes auto بهصورت خودکار به تعداد هستهٔ پردازنده تنظیم میشود، و worker_connections حداکثر تعداد اتصال همزمان به ازای هر Worker را مشخص میکند.
فعالسازی Gzip Compression
فشردهسازی خروجی قبل از ارسال به مرورگر، حجم انتقال داده را بهشدت کاهش میدهد:
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript;کشینگ فایلهای استاتیک در سطح مرورگر
فایلهایی مثل تصاویر، CSS و JS معمولاً بین بازدیدها تغییر نمیکنند؛ با تنظیم هدر Cache-Control، مرورگر آنها را دوباره از سرور درخواست نمیکند:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}راهاندازی FastCGI Cache برای PHP
برای سایتهای مبتنی بر PHP (مثل وردپرس)، کش کردن خروجی PHP-FPM در سطح Nginx میتواند بار سرور را چشمگیر کاهش دهد:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=PHPCACHE:100m inactive=60m max_size=1g;
server {
location ~ \.php$ {
fastcgi_cache PHPCACHE;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $http_cookie;
add_header X-Cache-Status $upstream_cache_status;
}
}هدر X-Cache-Status در پاسخ نشان میدهد یک درخواست از کش پاسخ داده شده (HIT) یا مستقیم از PHP-FPM (MISS)؛ ابزار خوبی برای عیبیابی است.
Nginx بهعنوان Reverse Proxy با کش
وقتی Nginx جلوی یک اپلیکیشن Node.js یا هر بکاند دیگری قرار میگیرد (Reverse Proxy)، میتوان پاسخهای آن را هم کش کرد:
proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=APPCACHE:50m max_size=500m inactive=30m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_cache APPCACHE;
proxy_cache_valid 200 10m;
}جمعبندی تنظیمات کلیدی
| تنظیم | تأثیر |
|---|---|
| worker_connections | افزایش ظرفیت اتصالات همزمان |
| gzip | کاهش حجم انتقال و افزایش سرعت بارگذاری |
| Browser Cache (expires) | کاهش درخواستهای تکراری به فایلهای استاتیک |
| FastCGI Cache | کاهش چشمگیر بار روی PHP-FPM و دیتابیس |
| Proxy Cache | کاهش بار روی اپلیکیشن بکاند پشت Reverse Proxy |
پس از هر تغییر در فایلهای پیکربندی، حتماً سینتکس را تست و سپس Nginx را ریلود کنید:
nginx -t
systemctl reload nginxاگر لاگهای دسترسی و خطای Nginx را هم بهطور منظم بررسی نمیکنید، مقالهٔ راهنمای پیکربندی لاگ و چرخش لاگهای Nginx به شما کمک میکند تا این لاگها بدون پر کردن فضای دیسک، بهدرستی مدیریت شوند.
برای اینکه اثر واقعی این تنظیمات روی مصرف منابع سرور را بسنجید، از زیرساخت مانیتورینگ توضیح دادهشده در مقالهٔ مانیتورینگ سرور لینوکس با Prometheus و Node Exporter استفاده کنید.
جمعبندی
بهینهسازی Nginx معمولاً نیازی به تغییرات پیچیده ندارد؛ ترکیب Gzip، کش مرورگر، FastCGI Cache یا Proxy Cache (بسته به نوع اپلیکیشن) و تنظیم درست Worker Connections، در اکثر سایتها زمان پاسخدهی را بهطور محسوسی کاهش میدهد.
