Skip to main content

NGINX-Receiver

Внимание

Данный скрипт актуален пока агент-получатель реализуемый напрямую в Пересвет-СТ находится в разработке

Описание

Скрипт для автоматической установки и настройки высокопроизводительного NGINX сервера с поддержкой различных протоколов (HTTP/1.1, HTTP/2) и версий TLS (1.2, 1.3) для участия в цепочке тестирования как сервера-получателя.

Зачем это нужно

Скрипт создаёт тестовый сервер с 6 различными конечными точками для проверки производительности и совместимости клиентов с разными версиями протоколов HTTP и TLS. Идеально подходит для:

  • Нагрузочного тестирования
  • Проверки совместимости клиентов
  • Бенчмаркинга различных протоколов
  • Тестирования SSL/TLS конфигураций

Общие требования

Рекомендуется использовать идентичную или более производительную конфигурацию чем выделена для агента-отправителя Пересвет-СТ для проведения комплексных stateful-тестов

  • Операционная система Ubuntu 22.04.2 LTS;
  • Минимум 32 ГБ оперативной памяти;
  • Не менее 16 физических ядер CPU Base Clock 2 GHz;
  • Не менее 16 RX/TX очередей для сетевой карты;
    • По умолчанию, многие виртуальные кластеры ВМ устанавливают 1 RX/TX очередь, что ограничивает производительность системы и позволяет ПО работать только на 1 ядре. Количество RX/TX очередей должно быть не меньше количества ядер ВМ.
  • Не менее 32 ГБ размер свободного диска.

Установка

Примечание

Логин и пароль для скачивания скрипта выдается сопровождающим инсталляцию инженером

Информация

На момент скачки и выполнения установочного скрипта серверу потребуется интернет

wget --user='USER' --password='PASSWORD' \
https://downloads.peresvet.it/vm-pool/proxmox/nginx-setup-v2.sh
chmod 777 nginx-setup-v2.sh
./nginx-setup-v2.sh

Параметры командной строки

# Показать справку
./nginx-setup-v2.sh --help

# Изменить размер контента (после установки)
./nginx-setup-v2.sh --resize <размер>

# Изменить SSL шифры (после установки)
./nginx-setup-v2.sh --cipher <порт> <шифры>

# Показать статус (после установки)
./nginx-setup-v2.sh --status

Доступные опции

При установке

  • Server IP/URL - IP адрес или URL сервера (по умолчанию: IP сервера)
  • Content size in bytes - Размер динамического контента в байтах размещаемого по пути /dynamic.txt (по умолчанию: 1 байт)

После установки

# Показать текущую конфигурацию
nginx-multiprotocol-status.sh

# Изменить размер динамического контента
nginx-multiprotocol-resize.sh <размер_в_байтах>

# Изменить SSL шифры для портов TLS 1.2
nginx-multiprotocol-cipher.sh <порт> <шифры>

# Примеры:
nginx-multiprotocol-resize.sh 1024 # 1KB
nginx-multiprotocol-resize.sh 1048576 # 1MB

nginx-multiprotocol-cipher.sh 8443 "ECDHE-RSA-AES256-GCM-SHA384"
nginx-multiprotocol-cipher.sh 8445 "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384"

# Слабые шифры для тестирования
nginx-multiprotocol-cipher.sh 8443 "AES128-SHA:AES256-SHA"

Примечание: Изменение шифров доступно только для портов 8443 и 8445 (TLS 1.2). Порты 8444 и 8446 используют TLS 1.3, где шифры контролируются OpenSSL (etc/ssl/openssl.cnf).

Конечные точки

После установки будут доступны 6 портов:

ПортПротоколTLS
8080HTTP/1.1Нет
8081HTTP/2Нет
8443HTTP/1.1TLS 1.2
8444HTTP/1.1TLS 1.3
8445HTTP/2TLS 1.2
8446HTTP/2TLS 1.3

Что устанавливается

  • NGINX - веб-сервер
  • OpenSSL - для SSL/TLS сертификатов
  • curl - для тестирования
  • lsof - для проверки портов
  • ethtool - для оптимизации сетевых интерфейсов

Применяемые оптимизации

Сетевые оптимизации

  • TCP BBR - алгоритм контроля перегрузок
  • Буферы 128MB - увеличенные размеры буферов приёма/отправки
  • TCP Fast Open - быстрое установление соединений
  • Отключены лимиты - нет ограничений на количество соединений, рейтлимита, кол-во пакетов и прочего

NGINX оптимизации

  • Worker процессы - по количеству ядер CPU с приоритетом -5
  • 999,999 соединений на worker процесс
  • Keepalive - 100 миллионов запросов на соединение
  • Таймауты - 24 часа (для длительных тестов)
  • AIO threads - асинхронный ввод/вывод для больших файлов
  • Отключено логирование - максимальная производительность
  • Отключено сжатие gzip - чистая пропускная способность
  • SSL шифры по умолчанию - ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384

Системные оптимизации

  • Huge Pages - включены и аллоцируются
  • CPU Performance Mode - максимальная частота процессора
  • Отключен Swap - предотвращение использования
  • Увеличены лимиты файлов - до 999 999 дескрипторов

Проверка после установки

Несмотря на то что скрипт после выполнения проверяет сам себя, вы также можете проверить что скрипт развернул NGINX корректно используя следующие команды

# HTTP/1.1
curl -I http://server:8080
curl http://server:8080/dynamic.txt

# HTTPS
curl -k https://server:8443
curl -k https://server:8443/dynamic.txt

# HTTP/2
curl --http2 -k https://server:8445
curl --http2 -k https://server:8445/dynamic.txt

# Проверка TLS версии
openssl s_client -connect server:8443 -tls1_2
openssl s_client -connect server:8444 -tls1_3

Важно

  • Используются самоподписанные SSL сертификаты
  • Все оптимизации настроены для максимальной производительности, а не безопасности
  • Некоторые оптимизации требуют перезагрузки для полного применения