Nginx из коробки работает хорошо, но не оптимально. Несколько изменений в конфигурации кратно увеличивают производительность и снижают нагрузку на сервер.
nginx.conf: базовые настройки
worker_processes auto; # Авто = количество CPU ядер
worker_rlimit_nofile 65535; # Макс. открытых файлов
events {
worker_connections 4096; # Подключений на worker
use epoll; # Linux-оптимизированный poll
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off; # Скрыть версию Nginx
}
Gzip-сжатие
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_types
text/plain text/css text/javascript
application/javascript application/json
application/xml image/svg+xml;
Browser Caching
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
FastCGI Cache для PHP
# В http блоке:
fastcgi_cache_path /var/cache/nginx levels=1:2
keys_zone=WORDPRESS:100m
inactive=60m max_size=1g;
# В server блоке:
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout updating http_500;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
✅ FastCGI Cache для WordPress снижает TTFB с 300–500 мс до 5–20 мс для кэшированных страниц.
Rate Limiting (защита от флуда)
# В http блоке:
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
# В location:
location /wp-login.php {
limit_req zone=api burst=5 nodelay;
limit_req_status 429;
}
HTTP/2 и HTTP/3
server {
listen 443 ssl http2;
# HTTP/3 (QUIC):
listen 443 quic reuseport;
add_header Alt-Svc 'h3=":443"; ma=86400';
}