НейроАгент

Как оптимизировать nginx при speedtest в 3x-ui-pro

Решение проблемы высокой нагрузки nginx worker process при speedtest в 3x-ui-pro. Оптимизация производительности, настройка ограничений и мониторинга сервера.

Вопрос

Как исправить падение скорости сервера при speedtest в nginx+3x-ui-pro?

У меня настроен сервер с панелью 3x-ui-pro, где работает VPN vless+reality. Трафик проходит через мой домен и маскируется через мой SNI. На доменах развернут nginx для маскировки сайта под реальный. Проблема: когда клиенты выполняют speedtest, процесс “nginx worker process” загружается на 120% и выше, что приводит к перегрузке сервера. В результате VPN трафик замедляется, 3x-ui перестает открываться, и общая производительность сервера падает. Как можно решить эту проблему? Я начинающий пользователь, поэтому прошу дать подробное объяснение.

НейроАгент

Для решения проблемы высокой нагрузки nginx worker process при выполнении speedtest необходимо оптимизировать конфигурацию nginx, ограничить пропускную способность для тестов скорости, увеличить количество worker процессов, а также настроить кэширование и мониторинг ресурсов сервера. Также важна правильная настройка 3x-ui-pro и VPN-сервисов для распределения нагрузки и предотвращения перегрузки системы.

Содержание

Основные причины проблемы

Проблема высокой нагрузки nginx при speedtest возникает из-за нескольких факторов:

  1. Отсутствие ограничений трафика - Speedtest создает максимальную нагрузку на сеть без каких-либо ограничений, что приводит к перегрузке worker процессов nginx.

  2. Неправильная конфигурация worker процессов - По умолчанию nginx использует ограниченное количество worker процессов, которые не справляются с пиковыми нагрузками.

  3. Маскировка трафика через nginx - Дополнительная обработка VPN трафика через nginx увеличивает нагрузку на CPU.

  4. Отсутствие кэширования - Каждое speedtest-соединение обрабатывается заново без использования кэша.

  5. Конфликты между сервисами - Нагрузка от speedtest влияет на производительность 3x-ui-pro и VPN-сервисов.

Важно: При использовании 3x-ui-pro с nginx возникает дополнительная нагрузка, так как трафик проходит через несколько уровней обработки: VPN → 3x-ui → nginx → интернет.

Оптимизация nginx worker процессов

Определение оптимального количества worker процессов

Для начала необходимо правильно настроить количество worker процессов в nginx:

nginx
# В файле /etc/nginx/nginx.conf
worker_processes auto;  # Автоматическое определение на основе ядер CPU
worker_cpu_affinity auto;  # Привязка процессов к ядрам CPU

Для систем с высокой нагрузкой рекомендуется:

nginx
# Для систем с 4+ ядрами
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

Настройка worker connections

Увеличьте количество соединений на worker процесс:

nginx
events {
    worker_connections 4096;
    multi_accept on;
    use epoll;
}

Оптимизация worker rlimit

nginx
worker_rlimit_nofile 100000;

Настройка буферизации

Оптимизируйте буферы для уменьшения нагрузки на CPU:

nginx
http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30;
    keepalive_requests 1000;
    reset_timedout_connection on;
    
    client_body_buffer_size 16K;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 2 1k;
    
    buffer_size 4k;
    buffers 8 4k;
    client_body_timeout 10;
    send_timeout 2;
}

Настройка ограничений для speedtest

Ограничение скорости через nginx

Добавьте ограничения в конфигурацию вашего сайта:

nginx
# В server блоке
server {
    # Ограничение скорости для speedtest
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_conn addr 10;
    limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
    limit_req zone=req burst=20 nodelay;
    
    # Ограничение скорости загрузки
    limit_rate_after 1m;
    limit_rate 512k;
}

Использование mod_evasive (если установлен)

nginx
# Для защиты от DDoS и перегрузки
if ($limit_rate) {
    set $limit_rate $limit_rate;
}

Настройка rate limiting для speedtest

Создайте отдельную конфигурацию для speedtest:

nginx
# /etc/nginx/conf.d/speedtest.conf
server {
    listen 80;
    server_name speedtest.vashdomen.com;
    
    # Строгие ограничения для speedtest
    limit_conn_zone $binary_remote_addr zone=speedtest:10m;
    limit_conn speedtest 5;
    limit_req_zone $binary_remote_addr zone=speedtest_req:10m rate=2r/m;
    limit_req zone=speedtest_req burst=5 nodelay;
    
    limit_rate 256k;
    limit_rate_after 512k;
    
    location / {
        proxy_pass http://127.0.0.1:8080;
        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_connect_timeout 30s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;
    }
}

Конфигурация 3x-ui-pro

Оптимизация 3x-ui-pro

  1. Увеличьте лимиты соединений в настройках 3x-ui-pro:

    • Перейдите в “Settings” → “Inbounds”
    • Увеличьте “Stream” → “Read Timeout” до 30000
    • Установите “Write Timeout” до 30000
  2. Настройте TLS для уменьшения нагрузки:

    json
    {
      "stream": {
        "security": "tls",
        "tlsSettings": {
          "allowInsecure": false,
          "serverName": "vashdomen.com",
          "alpn": ["h2", "http/1.1"]
        }
      }
    }
    
  3. Оптимизируйте работу с реальными доменами:

    • Используйте отдельные домены для VPN и маскировки
    • Настройте правильные SNI и Host заголовки

Настройка VPN для распределения нагрузки

Для vless+reality настройте:

json
{
  "inbounds": [
    {
      "type": "vless",
      "tag": "VLESS-REALITY",
      "listen": "127.0.0.1",
      "port": 443,
      "sniff": true,
      "sniffOverrideDestination": true,
      "settings": {
        "clients": [
          {
            "id": "ваш-uuid",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none",
        "fallbacks": [
          {
            "dest": 80,
            "xver": 0
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "vashdomen.com:443",
          "xver": 0,
          "serverNames": ["vashdomen.com"],
          "privateKey": "ваш-private-key",
          "minClient": "",
          "maxClient": "",
          "maxTimediff": 0
        }
      }
    }
  ]
}

Мониторинг и диагностика

Мониторинг ресурсов сервера

Установите и настройте мониторинг:

bash
# Установка htop
apt install htop -y

# Установка monitoring инструментов
apt install sysstat -y

# Настройка сбора статистики
sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
systemctl restart sysstat

Создание скрипта для мониторинга nginx

bash
#!/bin/bash
# /usr/local/bin/nginx-monitor.sh

# Проверка загрузки worker процессов
cpu_usage=$(ps aux | grep "nginx: worker process" | awk '{sum += $3} END {print sum}')

# Проверка количества активных соединений
connections=$(netstat -ant | grep nginx | wc -l)

# Проверка памяти
memory=$(ps aux | grep nginx | awk '{sum += $6} END {print sum/1024}')

echo "CPU Usage: $cpu_usage%"
echo "Active Connections: $connections"
echo "Memory Usage: ${memory}MB"

# Если CPU > 80%, отправляем уведомление
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
    echo "ALERT: Нагрузка nginx превышает 80%" | logger -t nginx-monitor
fi

Настройка автоматической перезагрузки

Добавьте в crontab:

bash
# Проверка каждые 5 минут
*/5 * * * * /usr/local/bin/nginx-monitor.sh

Логирование для анализа

Настройте детальное логирование nginx:

nginx
http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    'rt=$request_time uct="$upstream_connect_time" '
                    'uht="$upstream_header_time" urt="$upstream_response_time"';
    
    access_log /var/log/nginx/access.log main buffer=512k flush=1m;
    error_log /var/log/nginx/error.log warn;
}

Дополнительные методы оптимизации

Использование кэширования

Настройте кэширование в nginx:

nginx
http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m inactive=60m;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    
    server {
        location / {
            proxy_cache cache;
            proxy_pass http://backend;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        }
    }
}

Оптимизация TCP стека

Добавьте в /etc/sysctl.conf:

bash
# Оптимизация для высоких нагрузок
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 4096
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5

Примените изменения:

bash
sysctl -p

Использование gzip сжатия

nginx
http {
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

Отключение ненужных логов

Для high-load сред:

nginx
http {
    access_log off;
    log_not_found off;
}

Практические примеры конфигураций

Пример оптимизированной конфигурации nginx

nginx
user www-data;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 100000;

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

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30;
    keepalive_requests 1000;
    reset_timedout_connection on;
    
    # Rate limiting
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
    
    client_body_buffer_size 16K;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 2 1k;
    
    buffer_size 4k;
    buffers 8 4k;
    client_body_timeout 10;
    send_timeout 2;
    
    # Gzip
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    # Logging
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    'rt=$request_time uct="$upstream_connect_time" '
                    'uht="$upstream_header_time" urt="$upstream_response_time"';
    
    access_log /var/log/nginx/access.log main buffer=512k flush=1m;
    error_log /var/log/nginx/error.log warn;
    
    # Server blocks
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Пример конфигурации для speedtest с жесткими ограничениями

nginx
server {
    listen 80;
    listen 443 ssl http2;
    server_name speedtest.vashdomen.com;
    
    # SSL Configuration
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # Strict limits for speedtest
    limit_conn_zone $binary_remote_addr zone=speedtest:10m;
    limit_conn speedtest 3;
    limit_req_zone $binary_remote_addr zone=speedtest_req:10m rate=1r/m;
    limit_req zone=speedtest_req burst=3 nodelay;
    
    # Speed limits
    limit_rate 128k;
    limit_rate_after 256k;
    
    # Timeouts
    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 10s;
    send_timeout 10s;
    
    location / {
        proxy_pass http://127.0.0.1:8080;
        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 timeouts
        proxy_connect_timeout 5s;
        proxy_send_timeout 5s;
        proxy_read_timeout 5s;
        
        # Buffer settings
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
        proxy_busy_buffers_size 8k;
        
        # Caching
        proxy_cache cache;
        proxy_cache_valid 200 302 1m;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    }
    
    # Security headers
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "strict-origin-when-cross-origin";
}

Пример конфигурации для основного сайта

nginx
server {
    listen 80;
    listen 443 ssl http2;
    server_name vashdomen.com www.vashdomen.com;
    
    # SSL Configuration
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # Light rate limiting for normal traffic
    limit_conn_zone $binary_remote_addr zone=normal:10m;
    limit_conn normal 20;
    limit_req_zone $binary_remote_addr zone=normal_req:10m rate=20r/s;
    limit_req zone=normal_req burst=40 nodelay;
    
    # Higher speed limits for normal traffic
    limit_rate 2m;
    limit_rate_after 5m;
    
    location / {
        root /var/www/html;
        index index.html index.htm;
        
        # Security
        server_tokens off;
        
        # Caching
        expires 1h;
        add_header Cache-Control "public, immutable";
        
        # Compression
        gzip on;
        gzip_vary on;
        gzip_min_length 1024;
        gzip_comp_level 6;
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    }
    
    # Location for health checks
    location /health {
        access_log off;
        return 200 "healthy\n";
        add_header Content-Type text/plain;
    }
}

Заключение

Для решения проблемы высокой нагрузки nginx при speedtest необходимо:

  1. Оптимизировать количество worker процессов и их настройки в зависимости от количества ядер CPU
  2. Внедрить ограничения скорости для speedtest трафика через nginx rate limiting
  3. Настроить правильные таймауты и буферы для уменьшения нагрузки на CPU
  4. Оптимизировать 3x-ui-pro с правильными настройками TLS и потоков
  5. Внедрить мониторинг для及时发现 аномальной нагрузки
  6. Использовать кэширование и сжатие для уменьшения нагрузки
  7. Оптимизировать TCP стек для повышения производительности сети

Начните с базовых оптимизаций worker процессов и rate limiting, затем постепенно внедряйте другие методы. Регулярно мониторьте систему и корректируйте настройки в зависимости от реальной нагрузки. Не забывайте делать резервные копии конфигураций перед изменениями и тестировать систему в условиях низкой нагрузки перед внедрением в production.

Источники

  1. Официальная документация Nginx - Оптимизация производительности
  2. Nginx rate limiting документация
  3. 3x-ui официальная документация
  4. Оптимизация TCP стека для Linux
  5. Linux sysctl оптимизация
  6. Nginx worker process best practices