Только для посетителей нашего блога: получите дополнительные 3 месяца бесплатно + скидку 10% на трехгодичный план YSBLOG10
Захватить сделку

Как оптимизировать Nginx Руководство по работе на Linux Server

Оптимизировать Nginx На сервере Linux настройте рабочие процессы и соединения в соответствии с требованиями. CPU и трафика, обеспечение эффективного ввода-вывода (epoll, sendfile), сжатие и кэширование ответов, оптимизация протоколов TLS/HTTP и согласование ограничений ОС (ulimits, sysctl) с Nginx Требования. Проверка конфигурации, сравнительный анализ изменений и мониторинг показателей для обеспечения реального повышения производительности и стабильности.

В этом руководстве вы узнаете, как именно оптимизировать Nginx на сервере Linux — из ядра Nginx Настройка параметров ядра Linux, кэширование, TLS и мониторинг. Это пошаговое руководство, написанное для начинающих и администраторов среднего уровня, отражает более чем 12-летний опыт работы в сфере хостинга. YouStableпомогая вам добиться максимальной производительности, безопасности и эффективности от Nginx.

Что означает «оптимизация» для Nginx

Оптимизация — это не просто небольшая корректировка; это согласование на уровне всего стека между Nginx, ваше приложение (PHP-FPM, Node.js, Python), и операционная системаЦель состоит в том, чтобы обрабатывать больше запросов в секунду с меньшей задержкой и меньшим потреблением ресурсов — без ущерба для стабильности, безопасности или удобства обслуживания.

Перед полетом: подтвердите исходные параметры.

  • Обновите до поддерживаемой версии. Nginx сборка (предпочтительно основная ветка для новых функций и исправлений).
  • Оцените свою рабочую нагрузку: статические файлы, обратный прокси-сервер, PHP-FPM, Node.js или их комбинация.
  • Проверка CPU сердечники, RAMтип диска (SSD/NVMe) и пропускная способность сети.
  • Проверяйте текущие лимиты: открыть файлыsomaxconn, поведение TIME_WAIT, параметры ядра.
nginx -V
nginx -t
lscpu
ulimit -n
sysctl net.core.somaxconn net.ipv4.ip_local_port_range

Основные Nginx Подстройка производительности

1) Рабочие процессы и связи

Настройте работников в соответствии с физическими требованиями. CPU ядер и обеспечить достаточное количество соединений на каждый рабочий процесс для удовлетворения пиковой нагрузки. Для большинства задач веб-разработки... Nginx Он основан на событиях и эффективен, с меньшим количеством процессов.

# /etc/nginx/nginx.conf
user  nginx;
worker_processes  auto;
worker_rlimit_nofile  200000;

events {
    use epoll;
    worker_connections  65535;
    multi_accept on;
    # accept_mutex off; # Off for high connection churn, test both
}

Совет: Убедитесь, что системные лимиты на открытые файлы и лимиты на модули systemd выше, чем Nginxпотребности.

# /etc/systemd/system/nginx.service.d/limits.conf
[Service]
LimitNOFILE=200000

2) Буферы, механизм поддержания соединения и тайм-ауты

Использование буферов оптимального размера и разумных тайм-аутов предотвращает переполнение памяти и зависание соединений.

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout  15;
    keepalive_requests 1000;

    client_header_buffer_size 1k;
    large_client_header_buffers 2 8k;
    client_body_buffer_size 16k;

    client_max_body_size 32m;

    # Timeouts
    client_body_timeout 10s;
    client_header_timeout 10s;
    send_timeout 10s;
}

3) Сжатие Gzip или Brotli

Сжатие текстовых файлов экономит пропускную способность и ускоряет доставку. Gzip широко поддерживается; Brotli может обеспечить лучшее сжатие статических файлов.

# Gzip (built-in)
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/javascript application/json application/xml image/svg+xml;
gzip_vary on;

Для Brotli установите модуль и Включите его в качестве альтернативы или вместе с gzip. для клиентов, которые его поддерживают.

4) TLS и HTTP/2 (и HTTP/3, если доступен)

Современные протоколы снижают задержку. Используйте HTTP/2 для мультиплексирования и включите надежные алгоритмы шифрования с аппаратным ускорением. Если ваша сборка поддерживает QUIC/HTTP/3, тщательно протестируйте ее перед развертыванием в производственной среде.

server {
    listen 443 ssl http2; # add "quic reuseport" if built with HTTP/3
    server_name example.com;

    ssl_certificate /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256';
    ssl_prefer_server_ciphers off;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m; # ~400k sessions
    ssl_session_tickets off;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}

5) Заголовки для доставки статических файлов и кэширования

Предоставляйте статический контент напрямую из Nginx с использованием кэширующих заголовков для минимизации повторной проверки и загрузки исходных данных.

location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp|woff2?)$ {
    access_log off;
    log_not_found off;
    expires 30d;
    add_header Cache-Control "public, max-age=2592000, immutable";
}

Оптимизирующий Nginx в качестве обратного прокси

6) Поддерживающие буферы и буферы вышестоящего уровня

Поддерживайте соединение с исходящим каналом в активном состоянии, чтобы уменьшить накладные расходы на подтверждение соединения. Настройте буферы для стабилизации потоковой передачи ответов без чрезмерного расхода памяти.

upstream api_backend {
    server 127.0.0.1:3000 max_fails=3 fail_timeout=10s;
    keepalive 64;
}

location /api/ {
    proxy_pass http://api_backend;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;

    proxy_buffers 16 32k;
    proxy_busy_buffers_size 64k;
    proxy_read_timeout 30s;
}

7) PHP- Настройка FPM и FastCGI

Большинство сайтов WordPress/PHP узкое место на сайтах PHP-FPM. Используйте постоянные сокеты и микрокэширование для уменьшения динамических накладных расходов.

upstream php {
    server unix:/run/php/php-fpm.sock;
    keepalive 32;
}

fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=PHP:100m inactive=60m max_size=2g;
map $request_method $skip_cache { default 0; POST 1; }

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php-fpm.sock;

    fastcgi_read_timeout 30s;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;

    # Microcache
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
    fastcgi_cache PHP;
    fastcgi_cache_valid 200 301 302 1m;
    add_header X-Cache $upstream_cache_status;
}

Исключите из кэширования персонализированные пути или сеансы авторизованных пользователей, чтобы избежать предоставления приватного контента другим пользователям.

8) Прокси/микрокэширование для API

Микрокэширование с коротким временем жизни (TTL) сглаживает пики трафика для кэшируемых конечных точек без риска устаревания данных.

proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=API:100m inactive=30m max_size=1g;

location /v1/ {
    proxy_cache API;
    proxy_cache_valid 200 10s;
    proxy_cache_use_stale error timeout updating http_502 http_503 http_504;
    add_header X-Cache $upstream_cache_status;
}

Настройка ядра Linux и операционной системы

Ваши настройки Linux должны совпадать. NginxШаблоны параллельного выполнения и подключения. Эти настройки sysctl являются безопасными отправными точками — проведите тестирование и скорректируйте параметры под вашу рабочую нагрузку.

# /etc/sysctl.d/99-nginx.conf
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 16384
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_syncookies = 1
fs.file-max = 500000
sysctl --system
echo "* soft nofile 200000" >> /etc/security/limits.conf
echo "* hard nofile 200000" >> /etc/security/limits.conf

На загруженных многоядерных системах проверяйте повторное использование портов и привязку прерываний к сети. Всегда внедряйте изменения постепенно.

Ведение журналов, мониторинг и сравнительный анализ.

9) Журналы доступа и буферизация

Ведение логов каждого статического запроса — ресурсоемкий процесс. Отключите логирование для ресурсов и буферизацию записи для динамических путей.

log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" '
                '$request_time $upstream_response_time';

access_log /var/log/nginx/access.log main buffer=128k flush=1s;

10) Показатели и статус

Включите stub_status или экспортер для передачи данных в Prometheus/Grafana. Отслеживайте активные соединения, скорость запросов, задержку восходящего потока, коэффициент попадания в кэш и ошибки.

location /nginx_status {
    stub_status;
    allow 127.0.0.1;
    deny all;
}

11) Сравнительный анализ до и после

Используйте реалистичные значения параллелизма и размеров полезной нагрузки. Сравнивайте процентили задержки (p50/p95/p99), а не только средние значения.

# Example tools
wrk -t4 -c400 -d30s https://example.com/
ab -n 20000 -c 200 https://example.com/

Усиление безопасности при одновременной оптимизации

  • Скрыть версию: server_tokens off;
  • HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy и надежная Content-Security-Policy.
  • Ограничьте количество запросов и подключений, чтобы предотвратить злоупотребления.
server_tokens off;

limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m;

location / {
    limit_req zone=req_per_ip burst=20 nodelay;
    limit_conn conn_per_ip 20;
}

Распространенные ошибки, которых следует избегать

  • Избыточное выделение ресурсов worker_connections без увеличения лимитов файловой системы.
  • Слишком большие значения тайм-аутов по умолчанию приводят к задержке ресурсов, подобной той, что наблюдается у Slowloris.
  • Включение агрессивного кэширования для страниц, предназначенных для конкретных пользователей (например, админка WordPress, корзина).
  • Отсутствует устаревшая функция серверной отправки HTTP/2, и мы полагаемся на нее; вместо этого используйте подсказки предварительной загрузки.
  • Игнорирование узких мест в вышестоящем звене (база данных, PHP-FPM) и обвинение Nginx.

Пошаговый пример настройки

Ниже представлен безопасный, высокопроизводительный базовый вариант, который вы можете адаптировать. Всегда проводите проверку с помощью nginx -t и stage перед запуском в производство.

user nginx;
worker_processes auto;
worker_rlimit_nofile 200000;

events {
    use epoll;
    worker_connections 65535;
    multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 15;
    keepalive_requests 1000;

    # Compression
    gzip on;
    gzip_comp_level 5;
    gzip_min_length 256;
    gzip_types text/plain text/css application/json application/javascript application/xml image/svg+xml;
    gzip_vary on;

    # Logging
    log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" '
                    '$request_time $upstream_response_time';
    access_log /var/log/nginx/access.log main buffer=128k flush=1s;
    error_log /var/log/nginx/error.log warn;

    # Caches
    proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=API:100m inactive=30m max_size=1g;
    fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=PHP:100m inactive=60m max_size=2g;

    # Status
    server {
        listen 127.0.0.1:8080;
        location /nginx_status { stub_status; allow 127.0.0.1; deny all; }
    }

    # Site
    server {
        listen 80;
        listen 443 ssl http2;
        server_name example.com;
        root /var/www/html;
        index index.php index.html;

        ssl_certificate /etc/ssl/certs/fullchain.pem;
        ssl_certificate_key /etc/ssl/private/privkey.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_session_cache shared:SSL:50m;

        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

        location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp|woff2?)$ {
            access_log off;
            expires 30d;
            add_header Cache-Control "public, max-age=2592000, immutable";
        }

        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass unix:/run/php/php-fpm.sock;
            fastcgi_read_timeout 30s;
            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
            fastcgi_cache PHP;
            fastcgi_cache_valid 200 301 302 1m;
            add_header X-Cache $upstream_cache_status;
        }
    }
}

Контрольный список для проверки и внедрения

  • Команда `nginx -t` проходит успешно; конфигурация находится под контролем версий.
  • Системные ограничения (nofile, somaxconn) превышены. Nginx требования.
  • Проведите сравнительный анализ до и после; отслеживайте задержку p95, RPS, CPUпамять.
  • Правила кэширования исключают персонализированные или административные конечные точки.
  • Проверена оценка TLS; HTTP/2 включен; Brotli/Gzip проверен по заголовкам ответа.
  • Журналы доступа буферизуются; журналы активов отключены.
  • План отката готов; изменения внедрены в период низкой нагрузки.

Когда следует выбирать управляемый хостинг?

Если вы предпочитаете получать результаты без проб и ошибок, рассмотрите следующий вариант: manageд VPS or Выделенный сервер. В YouStableНаши инженеры проводят предварительную настройку. Nginx, PHPFPM и ядро ​​Linux настраивают кэширование и мониторинг, а также постоянно оптимизируют систему под вашу рабочую нагрузку, обеспечивая максимальную производительность с меньшим риском и простоями.

Выравнивая Nginx конфигурацияИспользование кэширования, TLS и параметров ядра Linux в сочетании с вашей реальной рабочей нагрузкой — и проверка каждого изменения — позволит вам добиться значительного повышения пропускной способности и удобства использования. Если вы хотите, чтобы этим занимались эксперты от начала до конца, YouStableАвтора manageСерверы d с самого начала проектируются с расчетом на скорость.

Часто задаваемые вопросы: Как оптимизировать Nginx на сервере Linux

Какое значение параметра worker_processes будет оптимальным? Nginx?

Используйте worker_processes auto; для соответствия вашим параметрам. CPU ядра. Это позволяет Nginx Используйте многоядерные системы в полной мере, избегая ручных расчетов. Всегда используйте их в сочетании с достаточным количеством рабочих соединений и ограничениями на размер файлов в операционной системе.

Как ускорить работу WordPress с помощью Nginx?

Включите микрокэширование FastCGI для анонимного трафика, используйте длинные заголовки кэша для обслуживания статических ресурсов, сжимайте данные с помощью Gzip/Brotli и обеспечьте PHP- У FPM достаточно рабочих процессов. Перенесите ресурсоемкие задачи на CDN. YouStableАвтора managed VPS для WordPress поставляется со следующими оптимизациями. по умолчанию.

Следует ли мне включить HTTP/3 для Nginx?

HTTP/3 может повысить производительность в сетях с высокой задержкой или мобильных сетях. Если ваш Nginx Сборка поддерживает QUIC/HTTP/3, протестируйте её с флагом функции. Оцените реальное влияние по сравнению с HTTP/2 перед широким внедрением.

Brotli лучше, чем Gzip? Nginx?

Brotli обычно сжимает текстовые файлы до размеров меньшего, чем Gzip, что сокращает время загрузки. Однако он тяжелее. CPUВ плане совместимости он отлично подходит для статических ресурсов, а Gzip остается надежным базовым форматом для широкой совместимости.

Как мне узнать, что мои изменения сработали?

Проведите сравнительный анализ производительности с помощью wrk или ab до и после, отслеживайте задержку p95/p99, частоту ошибок. CPU, памяти и коэффициентов попадания в кэш. Используйте Nginx Используйте stub_status или экспортер Prometheus. Сохраняйте только те изменения, которые демонстрируют измеримые улучшения при реальной нагрузке.

Отправить по:

Прахлад Праджапати

Пралад — специалист по веб-хостингу и эксперт по органическому росту сайтов с упором на SEO из Индии. Активно работая в цифровом пространстве с 2019 года, он помогает людям развивать свои веб-сайты с помощью эффективных и устойчивых стратегий. Увлеченный обучением и быстрой адаптацией, он считает, что мелкие детали приводят к большому успеху. Узнайте его мнение о веб-хостинге и SEO, чтобы улучшить свое присутствие в интернете.

Оставьте комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *

Наверх