دواپس و لینوکس
بهترین شیوههای 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، کش ایستا، هدرهای امنیتی و محدودیتهای نرخ معقول. این الگوها را استاندارد کنید و هر استقرار جدید بهجای کاوش باستانشناختی کپیپیست، از یک پایه محکم شروع میشود. کانفیگ فعلیتان را در برابر این فهرست بازبینی کنید — حداقل یک برد سریع پیدا میکنید.