← Назад к справочнику Nginx
⚡
Оптимизация производительности
Ускорьте ваш Nginx для production нагрузок
Found: 13 examples
Gzip сжатие (базовое)
EssentialОсновное сжатие для текстовых файлов
✅ Уменьшает размер файлов на 70-90%
gzipcompressionbasic
http {
# Включить gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript
application/json application/javascript application/xml+rss
application/rss+xml font/truetype font/opentype
application/vnd.ms-fontobject image/svg+xml;
gzip_disable "msie6";
}Gzip (агрессивное сжатие)
Максимальное сжатие для production
⚠️ Высокий уровень сжатия = больше CPU
gzipcompressionaggressive
http {
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 9; # Максимальное сжатие
gzip_min_length 256; # Сжимать файлы > 256 байт
gzip_types
text/plain
text/css
text/xml
text/javascript
application/json
application/javascript
application/x-javascript
application/xml
application/xml+rss
application/rss+xml
application/atom+xml
application/xhtml+xml
font/truetype
font/opentype
font/woff
font/woff2
application/vnd.ms-fontobject
image/svg+xml
image/x-icon;
gzip_disable "msie6";
}Кеширование статики
PopularКеш для изображений, шрифтов, CSS, JS
✅ Браузер кеширует на 1 год
cachestatic-filesperformance
server {
# Изображения
location ~* \.(jpg|jpeg|png|gif|ico|webp|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
# Шрифты
location ~* \.(woff|woff2|ttf|otf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Access-Control-Allow-Origin "*";
access_log off;
}
# CSS и JS
location ~* \.(css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
# HTML (короткий кеш)
location ~* \.html$ {
expires 1h;
add_header Cache-Control "public, must-revalidate";
}
}Proxy Cache
AdvancedКеширование проксированных запросов
✅ Кеширует ответы бэкенда
cacheproxybackend
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_pass http://backend:8000;
# Использовать кеш
proxy_cache my_cache;
proxy_cache_valid 200 60m;
proxy_cache_valid 404 10m;
proxy_cache_use_stale error timeout http_500 http_502 http_503;
# Headers
add_header X-Cache-Status $upstream_cache_status;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}Microcaching
Короткий кеш для динамического контента
✅ Защищает от всплесков трафика
cachemicrocacheapi
http {
proxy_cache_path /var/cache/nginx/microcache
levels=1:2
keys_zone=microcache:10m
max_size=1g
inactive=1m;
server {
location /api {
proxy_pass http://backend:8000;
# Микрокеш на 1 секунду
proxy_cache microcache;
proxy_cache_valid 200 1s;
proxy_cache_lock on;
proxy_cache_use_stale updating;
add_header X-Cache-Status $upstream_cache_status;
}
}
}HTTP/2
ModernВключение HTTP/2 для ускорения
✅ HTTP/2 быстрее на 30-50%
http2sslperformance
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# HTTP/2 параметры
http2_push_preload on; # Server Push
location / {
proxy_pass http://localhost:3000;
}
}Оптимизация буферов
AdvancedНастройка буферов для производительности
buffersoptimizationtuning
http {
# Client body buffer
client_body_buffer_size 128k;
client_max_body_size 10m;
# Headers buffer
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
# Output buffers
output_buffers 32 32k;
postpone_output 1460;
# Sendfile
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# Keepalive
keepalive_timeout 65;
keepalive_requests 100;
}Таймауты
Оптимальные таймауты для production
timeoutstuning
http {
# Client timeouts
client_body_timeout 12s;
client_header_timeout 12s;
send_timeout 10s;
# Proxy timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# Keepalive
keepalive_timeout 65s;
keepalive_requests 100;
}Worker процессы
ProductionНастройка воркеров под CPU
✅ Использует все доступные CPU
workerscpuoptimization
# Автоматическое определение количества CPU
worker_processes auto;
# Максимум открытых файлов на воркер
worker_rlimit_nofile 65535;
events {
# Максимум соединений на воркер
worker_connections 4096;
# Эффективная модель событий
use epoll;
# Принимать несколько соединений одновременно
multi_accept on;
}Rate Limiting
SecurityОграничение запросов для защиты
✅ Защищает от DDoS и перегрузки
rate-limitingsecurityddos
http {
# Зона для rate limiting (10 запросов/сек на IP)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
# Зона для ограничения соединений
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
location /api {
# Применить rate limiting
limit_req zone=api_limit burst=20 nodelay;
limit_conn conn_limit 10;
# Кастомные ошибки
limit_req_status 429;
limit_conn_status 429;
proxy_pass http://backend:8000;
}
}
}Open File Cache
Кеширование открытых файлов
✅ Ускоряет доступ к статическим файлам
cachefilesoptimization
http {
# Кеш метаданных файлов
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
}Полная Production конфигурация
ProductionВсе оптимизации вместе
✅ Готовая высокопроизводительная конфигурация
productionfull-configoptimized
user nginx;
worker_processes auto;
worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Логи
access_log /var/log/nginx/access.log;
# Performance
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 100;
# Buffers
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
# Timeouts
client_body_timeout 12s;
client_header_timeout 12s;
send_timeout 10s;
# Gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript
application/json application/javascript application/xml+rss;
# File cache
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# Proxy cache
proxy_cache_path /var/cache/nginx
levels=1:2
keys_zone=my_cache:10m
max_size=1g
inactive=60m;
# Rate limiting
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
# Include configs
include /etc/nginx/conf.d/*.conf;
}Мониторинг производительности
DevOpsМетрики и логи для отслеживания
monitoringmetricslogging
http {
# Формат логов с временем ответа
log_format performance '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
access_log /var/log/nginx/performance.log performance;
server {
# Stub status для мониторинга
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
}
# Проверка метрик
# curl http://localhost/nginx_status