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 |
|---|---|---|
| 8080 | HTTP/1.1 | Нет |
| 8081 | HTTP/2 | Нет |
| 8443 | HTTP/1.1 | TLS 1.2 |
| 8444 | HTTP/1.1 | TLS 1.3 |
| 8445 | HTTP/2 | TLS 1.2 |
| 8446 | HTTP/2 | TLS 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 сертификаты
- Все оптимизации настроены для максимальной производительности, а не безопасности
- Некоторые оптимизации требуют перезагрузки для полного применения