← Назад к справочнику 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