


Nginx یک وبسرور قدرتمند و High-Performance است که بهخاطر مدیریت عالی اتصالهای همزمان (Concurrent Connections) انتخاب محبوبی برای سایتهای پرترافیک محسوب میشود.
اگر Nginx را درست تنظیم کنید، زمان پاسخ کاهش پیدا میکند، مصرف منابع منطقیتر میشود و سایت در ترافیک بالا پایدارتر میماند.


اگر به هاست نیاز دارید، صفحه هاست لینوکس ایران یا راهنمای هاست لینوکس چیست؟ میتواند انتخاب را سادهتر کند.
آپدیت نگهداشتن Nginx یعنی استفاده از بهبودهای Performance، قابلیتهای جدید و Security Patchها.
(نکته فنی: در بعضی توزیعها، مخزن پیشفرض همیشه «آخرین Mainline» نیست؛ اما برای اکثر سناریوها کافی است.)
# Ubuntu/Debian sudo apt update sudo apt install nginx # RHEL/AlmaLinux/Rocky Linux sudo dnf update sudo dnf install nginx # بررسی نسخه nginx -v
Nginx برای مدیریت اتصالهای ورودی از worker process استفاده میکند.
یک قاعده مهم: سقف اتصالهای همزمان تقریباً برابر است با worker_processes × worker_connections (بهشرط کافی بودن ulimit و منابع سیستم).
فایل کانفیگ اصلی را باز کنید:
/etc/nginx/nginx.conf
sudo nano /etc/nginx/nginx.conf
نمونه تنظیم پیشنهادی (قابل تنظیم بر اساس منابع و ترافیک):
# بهتر است روی auto باشد
worker_processes auto;
# اگر ترافیک بالاست، 1024 معمولاً کم است (بسته به RAM/CPU/نوع اپ)
events {
worker_connections 4096;
multi_accept on;
}
# (پیشنهاد تکمیلی برای ترافیک بالا)
worker_rlimit_nofile 200000;
Gzip حجم داده ارسالی را کم میکند و معمولاً باعث کاهش زمان Load و مصرف Bandwidth میشود.
تنظیمات را داخل بلاک http قرار دهید:
http {
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_min_length 256;
gzip_comp_level 5;
gzip_types
text/plain
text/css
application/json
application/javascript
text/xml
application/xml
application/xml+rss
text/javascript;
}
نکته: gzip_comp_level بین 1 تا 9 است؛ عدد بالاتر Compression بهتر ولی CPU بیشتر.
برای فایلهای استاتیک مثل CSS/JS و تصاویر، Cache مرورگر باعث کاهش فشار روی سرور و سریعتر شدن لود صفحات میشود.
این تنظیم را داخل server { … } بگذارید:
location ~* \.(?:jpg|jpeg|png|gif|ico|css|js|webp|svg|woff|woff2|ttf)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off;
}
این بخش کمک میکند اتصالهای بیشتری را با مصرف RAM منطقی مدیریت کنید و جلوی گیرکردن Connectionهای کند را بگیرید.
نمونه تنظیم داخل بلاک http:
http {
client_body_buffer_size 16k;
client_max_body_size 8m;
client_header_buffer_size 1k;
large_client_header_buffers 4 16k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
client_header_timeout 10s;
client_body_timeout 10s;
send_timeout 10s;
types_hash_max_size 2048;
}
اگر چند سرور Backend دارید، Nginx میتواند ترافیک را بین آنها توزیع کند تا هم Performance بهتر شود هم Redundancy داشته باشید.
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
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_set_header X-Forwarded-Proto $scheme;
}
}
نمونه Proxy Cache (داخل http و سپس server/location):
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_pass http://backend;
}
}
}
نمونه FastCGI Cache برای PHP-FPM (اگر سایت PHP دارید):
http {
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=phpcache:100m inactive=60m max_size=2g;
server {
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_cache phpcache;
fastcgi_cache_valid 200 30m;
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
add_header X-FastCGI-Cache $upstream_cache_status;
}
}
}
محدودسازی نرخ درخواستها (Rate Limiting) و تعداد اتصالها (Connection Limiting) میتواند جلوی فشار غیرعادی را بگیرد.
نمونه (داخل http و سپس server/location):
http {
# Rate limiting
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
# Connection limiting
limit_conn_zone $binary_remote_addr zone=connlimit:10m;
server {
location / {
limit_req zone=one burst=20 nodelay;
limit_conn connlimit 50;
}
}
}
نکته: اگر پشت CDN/Proxy هستید، باید Real IP را درست تنظیم کنید وگرنه همه کاربران یک IP دیده میشوند.
# تست کانفیگ sudo nginx -t # ریاستارت sudo systemctl restart nginx # بررسی وضعیت sudo systemctl status nginx --no-pager
برای High Traffic، افزایش open files و چند پارامتر شبکه Kernel میتواند تفاوت محسوسی ایجاد کند (بهخصوص وقتی Connection زیاد دارید).
# نمایش Limit فعلی ulimit -n # نمونه sysctl (با احتیاط و تست) sudo nano /etc/sysctl.d/99-nginx-tuning.conf
net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.ip_local_port_range = 10240 65535 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_tw_reuse = 1
# اعمال تغییرات sysctl sudo sysctl --system
خدمات مورد نیاز شما را با کیفیتی که انتظار دارید و قیمتی که انتظار ندارید.





