• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

http3 test

Эта статья посвящена использованию и настройке HTTP/3 – новой версии протокола HTTP, которая может пригодиться всем, кому интересно будет протестировать и посмотреть, как и насколько быстро она работает. На момент написания статьи использовать HTTP/3 можно было лишь в тестовом варианте, так как этот протокол пока поддерживается только браузерами для разработчиков, такими как Chrome Canary (доступен только для Windows). При попытке открыть через браузер пользователя будет выходить либо ошибка, либо сайт откроется по протоколу HTTP/2 – если все правильно настроено.

Что же такое HTTP/3?

Протокол HTTP/3 предназначен для увеличения скорости загрузки сайтов и повышения безопасности Интернет. Его основным отличием перед HTTP/1.1 и HTTP/2 является отказ от TCP. Новый протокол построен на базе экспериментального транспортного протокола QUIC, разрабатываемого Google.

QUIC отличается тем, что использует для обмена данными с клиентом одно, а не множество соединений. Поэтому нету проблемы «медленного старта». Кроме этого установка соединения трех-этапное рукопожатие (handshake) c рукопожатием TLS. Это так же повышает безопасность, сокращает количество служебного трафика и увеличивает скорость. Подробнее о стандарте HTTP/3 советую почитать в этой статье.

HTTP/3 и QUIC могут быть интегрированы и в вашу собственную установку NGINX. Это стало доступным после модифицирования исходного кода NGINX. Подробнее о стандарте HTTP/3 советую почитать в Интернете, так как информации о протоколе много, и она не вписывается в формат нашей статьи про его установку.

Как установить HTTP/3: пошаговая инструкция

Для установки будет использоваться VPS-сервер с минимальными параметрами (1 ядро, 1 ГБ оперативной памяти), и система будет основана на чистом Debian 9. Нужные модули к нему мы установим по мере настройки HTTP/3 и Nginx. Они будут указаны.

Возможно, эти параметры установки сработают и для других ОС, но они пока не тестировались.
Для начала нужно подключиться к серверу по SSH. После успешного подключения попадаем в домашний каталог. Затем переходим в любой другой (я в данной установке использую папку opt):

cd /opt

Скачиваем последний пакет Nginx 1.16.1, который уже имеет поддержку HTTP/3:

curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf nginx-1.16.1.tar.gz

Если в системе не установлен GIT, устанавливаем:

apt install git

Клонируем файлы, заходим в каталог и делаем нужный патч. Ставим библиотеку, которую подготовил Cloudflare:

git clone --recursive https://github.com/cloudflare/quiche
cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

Теперь необходимо установить все нужные модули и зависимости, которые могут потребоваться для конфигурации и настройки нашего модифицированного NGINX. Эти библиотеки были выбраны путем проб и ошибок:

apt install cmake golang cargo build-essential libpcre++-dev libssl-dev libgeoip-dev
libxslt1-dev libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

Теперь нужно удалить библиотеки языка Rust из своей системы, если они установились в виде зависимости к другим библиотекам (например, cargo). Для установки требуются экспериментальные сборки – обычная работать не будет:

apt remove libstd-rust-1.24:amd64
apt remove libstd-rust-1.28:amd64
apt remove libstd-rust-dev:amd64

apt remove rust-gdb
apt remove rustc

Подключаем язык Rust так, чтобы он смог работать со скриптом:

curl -s https://static.rust-lang.org/rustup.sh | sh -s -- --channel=nightly
curl -f -L https://static.rust-lang.org/rustup.sh -O
sh rustup.sh

Запустится установщик. Теперь нужно поменять некоторые параметры, так как по умолчанию устанавливается stable, а нам нужна «ночная сборка»:

Запущеный установщик

Примерно так должны выглядеть параметры:

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

Вот как выглядит консоль после успешной установки:

Вид консоли после установки

Далее выполняем команду, которая требуется после установки:

source $HOME/.cargo/env

Когда все библиотеки установлены, можно приступать к конфигурированию:

./configure \
--prefix=$PWD \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_v3_module \
--with-openssl=../quiche/deps/boringssl \
--with-quiche=../quiche

Устанавливаем. Этот процесс очень длительный:

make install

То, что выдает ошибку install, – это не страшно. Если что-то пошло не так, например, показывает ошибку библиотеки красным цветом, – скорее всего, какая-то из библиотек была неправильно установлена. В основном ошибки возникают из-за проблем с библиотекой Rust, так как должен быть установлен пакет разработчика.

Далее нужно сконфигурировать Nginx вручную, так как сервер не устанавливается в систему, требуя ручного запуска и остановки.

Создаем файл:

 

nano /etc/init/nginx.conf

Вставляем содержимое:

# nginx
description "nginx http daemon"
start on (filesystem and net-device-up IFACE!=lo)
stop on runlevel [!2345]
env DAEMON=/opt/nginx-1.16.1/sbin/nginx
env PID=/var/run/nginx.pid
expect fork
respawn
respawn limit 10 5
#oom never
pre-start script
$DAEMON -t
if [ $? -ne 0 ]
then exit $?
fi
end script
exec $DAEMON

Можете проверить версию и протестировать установленный сервер Nginx в папке, выполнив команды:

sbin/nginx -v
sbin/nginx -t

Создаем папку с логами, так как она не создается по умолчанию:

mkdir logs
root@localhost:/opt/nginx-1.16.1# sbin/nginx -t
nginx: the configuration file /opt/nginx-1.16.1/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx-1.16.1/conf/nginx.conf test is successful

Пробуем запустить сервер:

sbin/nginx

Перезапуск сервера выполняется с помощью команды:

sbin/nginx -s reload

Для подключения протокола HTTP/3 на сервере потребуется сгенерировать ключ для сайта:

cd conf
openssl req -newkey rsa:2048 -nodes -keyout cert.key -x509 -days 365 -out
certificate.pem

И уже после генерации ключа нужно прописать в конфигурационном файле нужные строчки, сразу после скобок server:

nano nginx.conf
http {
server {
# Enable QUIC and HTTP/3.
listen 443 quic reuseport;
# Enable HTTP/2 (optional).
listen 443 ssl http2;
ssl_certificate certificate.pem;
ssl_certificate_key cert.key;
# Enable all TLS versions (TLSv1.3 is required for QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# Add Alt-Svc header to negotiate HTTP/3.
add_header alt-svc 'h3-23=":443"; ma=86400';
}
}

Перезагружаем сервер и проверяем, все ли работает:

sbin/nginx -s reload

Через обычный браузер подключиться вы не сможете, так как HTTP/3 еще не поддерживается современными браузерами (по крайней мере, на момент написания). Повторюсь, что только браузеры для разработчиков, как, например, Chrome Canary, имеют поддержку HTTP/3. Но проверить работу вашего тестового сервера можно, скачав специальный скрипт, который подготовил Cloudflare:

git clone --recursive https://github.com/cloudflare/quiche
cd quiche/
cargo build --examples
RUST_LOG=info target/debug/examples/http3-client https://blog.cloudflare.com/

В самом конце, в случае успеха, скрипт выдаст такое сообщение:

[2019-11-05T11:34:11.487193464Z INFO http3_client] 1/1 response(s) received
in 923.849062ms, closing...
[2019-11-05T11:34:11.571947058Z INFO http3_client] connection closed,
recv=66 sent=13 lost=0 rtt=1.544506ms cwnd=16033

Это означает, что ваш экспериментальный сервер настроен успешно для работы с HTTP/3. Пока даже HTTP/2 поддерживают не все серверы, и, как было упомянуто ранее, на момент написания статьи, HTTP/3 не поддерживают браузеры для пользователей.

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

Заказывайте у нас VDS сервер для тестирования HTTP/3.

Дата: 21.11.2019
Автор: Евгений

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA