Cloudflare připravil modul, který poskytuje podporu protokolu HTTP / 3 v NGINX. Modul je hotový ve formě snap na quiche knihovně vyvinutý na Cloudflare s implementací transportního protokolu QUIC a HTTP / 3. Kód quiche je napsán v Rustu, ale modul pro NGINX je napsán v C a přistupuje ke knihovně prostřednictvím dynamických odkazů. Podle licence BSD jsou otevřeny provozní hodiny.
Z klientského softwaru Do experimentálních sestavení Chrome Canary již byla přidána podpora HTTP / 3 a nástroj zvlnění. Na straně serveru bylo dosud vyžadováno použití izolovaných testovacích implementací, které mají omezené schopnosti. Schopnost zpracovávat HTTP / 3 v nginx výrazně zjednoduší nasazení serverů s podporou HTTP / 3 a zpřístupní testovací implementaci nového protokolu.
HTTP / 3 standardizuje použití protokolu QUIC jako transport pro HTTP / 2. Protokol QUIC byl vyvinut společností Google jako alternativa k protokolu TCP + TLS pro web zamýšlí řešit problémy s dlouhou dobou instalace a koordinačních sloučenin v TCP a zpožďuje eliminaci ztráty paketů během přenosu dat. QUIC je zásuvný modul k protokolu UDP, který podporuje multiplexování více připojení a poskytuje metody šifrování ekvivalentní TLS / SSL.
Mezi klíčové vlastnosti QUIC, které vynikají:
- Vysoké zabezpečení, podobné TLS (ve skutečnosti poskytuje QUIC možnost používat TLS přes UDP).
- Řízení integrity toku, které zabraňuje ztrátě paketů.
- Schopnost okamžitě navázat spojení (0-RTT, v asi 75% případů lze data přenést okamžitě po odeslání paketu nastavení připojení) a zajistit minimální zpoždění mezi odesláním požadavku a přijetím odpovědi (RTT, doba zpáteční cesty) .
- Nepoužívání stejného pořadového čísla při opětovném přenosu paketu, což zabrání nejednoznačnosti při určování přijatých paketů a eliminuje časové limity.
- Ztráta paketu ovlivní doručení pouze s ním spojeného streamu a nezastaví doručení dat v streamech přenášených paralelně přes aktuální připojení.
- Nástroje pro opravu chyb, které minimalizují zpoždění v důsledku opakovaného přenosu ztracených paketů. Použití speciálních kódů pro opravu chyb na úrovni paketů ke snížení situací, které vyžadují opakovaný přenos ztracených dat paketů.
- Hranice kryptografických bloků jsou zarovnány s hranicemi paketů QUIC, což snižuje účinek ztráty paketů na dekódování obsahu následujících paketů
- Žádné problémy s blokováním fronty TCP
- Podpora identifikátoru připojení, která zkracuje dobu potřebnou k navázání opětovného připojení pro mobilní klienty
- Schopnost připojit pokročilé mechanismy pro řízení přetížení připojení
- Použití techniky předpovídání šířky pásma v každém směru k zajištění optimální intenzity předávání paketů, která mu brání v dosažení stavu přetížení, při kterém je pozorována ztráta paketu
- Pozoruhodný výkon a zvýšení výkonu přes TCP. U video služeb, jako je YouTube, vykázal QUIC 30% snížení operací opětovného ukládání do vyrovnávací paměti při sledování videí.
Jak implementovat modul pro podporu HTTP / 3 v NGINX?
Pro ty, kteří mají zájem o možnost implementovat tento modul na svém serveru, Mohou to provést podle pokynů, které sdílíme níže.
Chcete-li jej sestavit, prostě si musí stáhnout opravu pro nginx 1.16 a kód knihovny quiche.
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz tar xzvf nginx-1.16.1.tar.gz git clone --recursive https://github.com/cloudflare/quiche cd nginx-1.16.1 patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
A sestavujeme NGINX s povolenou podporou HTTP / 3:
./configure \ --prefix=$PWD \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_v3_module \ --with-openssl=../quiche/deps/boringssl \ --with-quiche=../quiche make
Během kompilace by podpora TLS měla být založena na knihovně BoringSSL („–with-openssl = .. / quiche / deps / boringssl“), použití OpenSSL ještě není podporováno.
Aby mohli přijímat připojení v konfiguraci, budou muset přidat direktivu posluchače s příznakem „quic“.