رفتن به محتوای اصلی
iServer24 | ارائه‌کننده سرورهای ابری و اختصاصی
بهینه‌سازی کارایی Nginx: تیونینگ و کشینگ برای سرعت بیشتر سایت

بهینه‌سازی کارایی Nginx: تیونینگ و کشینگ برای سرعت بیشتر سایت

آموزش تیونینگ Nginx شامل تنظیم Worker Connections، فعال‌سازی Gzip، کش مرورگر برای فایل‌های استاتیک، FastCGI Cache برای PHP و Proxy Cache برای اپلیکیشن‌های پشت Reverse Proxy.

بهینه‌سازی کارایی Nginx: تیونینگ و کشینگ برای سرعت بیشتر سایت

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

Worker Processes و Worker Connections

این دو مقدار تعیین می‌کنند Nginx چند درخواست هم‌زمان را می‌تواند پردازش کند:

6 خط
worker_processes auto;

events {
    worker_connections 4096;
    multi_accept on;
}
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

worker_processes auto به‌صورت خودکار به تعداد هستهٔ پردازنده تنظیم می‌شود، و worker_connections حداکثر تعداد اتصال هم‌زمان به ازای هر Worker را مشخص می‌کند.

فعال‌سازی Gzip Compression

فشرده‌سازی خروجی قبل از ارسال به مرورگر، حجم انتقال داده را به‌شدت کاهش می‌دهد:

5 خط
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، مرورگر آن‌ها را دوباره از سرور درخواست نمی‌کند:

4 خط
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 می‌تواند بار سرور را چشمگیر کاهش دهد:

10 خط
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)، می‌توان پاسخ‌های آن را هم کش کرد:

7 خط
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 را ری‌لود کنید:

2 خط
nginx -t
systemctl reload nginx
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اگر لاگ‌های دسترسی و خطای Nginx را هم به‌طور منظم بررسی نمی‌کنید، مقالهٔ راهنمای پیکربندی لاگ و چرخش لاگ‌های Nginx به شما کمک می‌کند تا این لاگ‌ها بدون پر کردن فضای دیسک، به‌درستی مدیریت شوند.

برای اینکه اثر واقعی این تنظیمات روی مصرف منابع سرور را بسنجید، از زیرساخت مانیتورینگ توضیح داده‌شده در مقالهٔ مانیتورینگ سرور لینوکس با Prometheus و Node Exporter استفاده کنید.

جمع‌بندی

بهینه‌سازی Nginx معمولاً نیازی به تغییرات پیچیده ندارد؛ ترکیب Gzip، کش مرورگر، FastCGI Cache یا Proxy Cache (بسته به نوع اپلیکیشن) و تنظیم درست Worker Connections، در اکثر سایت‌ها زمان پاسخ‌دهی را به‌طور محسوسی کاهش می‌دهد.

زیرساخت ابری برای اجرای همین آموزش

سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

ادامه یادگیری:Docker·Ubuntu·VPS