دواپس و لینوکس

بهترین شیوه‌های Nginx برای اپلیکیشن‌های وب

نویسنده: Hadi ZareZadeh۱۳ فروردین ۱۴۰۵۲۶۸۱ بازدید
بهترین شیوه‌های Nginx برای اپلیکیشن‌های وب

کانفیگ‌های Nginx معمولاً به‌شکل ارگانیک رشد می‌کنند — قطعه‌های کپی‌پیست‌شده، آزمایش‌های کامنت‌شده، includeهای مرموز. بعد از نگهداری چند استقرار تولیدی، به یک مجموعه استاندارد از الگوها رسیده‌ام که روی هر سایت جدید اعمال می‌کنم. هیچ‌کدام عجیب‌وغریب نیست؛ همه‌شان از مشکلات جلوگیری می‌کنند.

کانفیگ‌های جدا برای هر سایت

یک فایل برای هر سایت در sites-available/، با symlink به sites-enabled/. یک snippet مشترک برای تنظیمات رایج نگه دارید:

# /etc/nginx/snippets/security-headers.conf
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

فشرده‌سازی Gzip

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml;

فشرده‌سازی اندازه انتقال را برای دارایی‌های متنی به‌شکل قابل‌توجهی کم می‌کند. سطح ۵ تعادل خوبی بین CPU و صرفه‌جویی است.

کش دارایی‌های ایستا

دارایی‌های ساخته‌شده را با هدرهای کش طولانی و نام‌فایل‌های شکست‌کش (Vite این را مدیریت می‌کند) سرو کنید:

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
    access_log off;
}

محدودیت نرخ

limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

location /login {
    limit_req zone=login burst=3 nodelay;
    # ... کانفیگ proxy یا fastcgi
}

سلامت upstream برای PHP-FPM

برای PHP-FPM روی همان ماشین از یک سوکت یونیکس استفاده کنید — سریع‌تر از TCP:

fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;

fastcgi_read_timeout را برای endpointهایی که واقعاً طولانی‌ترند بالا ببرید، اما اول بررسی کنید چرا کندند.

اشتباهات رایج

  • نبود fallback با try_files برای SPA/لاراول. دسترسی مستقیم URL به مسیرها بدون آن 404 می‌دهد.
  • لاگ کردن هر درخواست دارایی ایستا. نوفه‌ای که دیسک را پر می‌کند؛ لاگ دسترسی را برای فایل‌های ایستا غیرفعال کنید.
  • نبود هدرهای امنیتی. بردی آسان برای محافظت در برابر XSS و کلیک‌دزدی.

بهترین شیوه‌ها

  • قبل از ری‌لود کانفیگ را تست کنید: sudo nginx -t.
  • یک دایرکتوری snippets مشترک برای کانفیگ‌های DRY نگه دارید.
  • لاگ‌های خطا را مانیتور کنید — Nginx درباره شکست‌های upstream روشن حرف می‌زند.

جمع‌بندی

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