Cloudflare pripravil modul poskytujúci podporu protokolu HTTP / 3 v NGINX. Modul je hotový vo forme cvaknutia na knižnici quiche vyvinutý v Cloudflare s implementáciou transportného protokolu QUIC a HTTP / 3. Quiche kód je napísaný v Rust, ale modul pre NGINX je napísaný v jazyku C a pristupuje ku knižnici prostredníctvom dynamických odkazov. Hodiny prevádzky sú otvorené podľa licencie BSD.
Z klientskeho softvéru Podpora experimentov HTTP / 3 už bola pridaná do experimentálnych zostavení prehliadača Chrome Canary a zvlnenie. Na strane servera sa doteraz vyžadovalo použitie izolovaných implementácií testov, ktoré majú obmedzené schopnosti. Schopnosť zvládnuť HTTP / 3 v nginx výrazne podporí nasadenie serverov s podporou protokolu HTTP / 3 a sprístupnenie testovacej implementácie nového protokolu bude dostupnejšie.
HTTP / 3 štandardizuje použitie protokolu QUIC ako transport pre HTTP / 2. Protokol QUIC vyvinul Google ako alternatívu k protokolu TCP + TLS pre web mieni riesit problemy s dlhou dobou instalacie a koordinacnych zloziek v TCP a oneskoruje elimináciu straty paketov počas prenosu dát. QUIC je doplnok k protokolu UDP, ktorý podporuje multiplexovanie viacerých pripojení a poskytuje metódy šifrovania rovnocenné s TLS / SSL.
Medzi kľúčové charakteristiky QUIC, ktoré vynikajú:
- Vysoká bezpečnosť, podobná TLS (v skutočnosti poskytuje QUIC možnosť používať TLS cez UDP).
- Riadenie integrity toku, ktoré zabraňuje strate paketov.
- Schopnosť okamžite nadviazať spojenie (0-RTT, v asi 75% prípadov je možné dáta preniesť okamžite po odoslaní paketu nastavenia spojenia) a zabezpečiť minimálne oneskorenie medzi odoslaním žiadosti a prijatím odpovede (RTT, doba obojsmerného prepojenia) .
- Nepoužívanie rovnakého poradového čísla pri opätovnom vysielaní paketu, čo zabráni nejasnostiam pri určovaní prijatých paketov a eliminuje časové limity.
- Strata paketu ovplyvňuje doručenie iba toku, ktorý je s ním spojený, a nezastaví doručenie údajov v prúdoch vysielaných paralelne cez súčasné pripojenie.
- Nástroje na opravu chýb, ktoré minimalizujú oneskorenia v dôsledku opakovaného prenosu stratených paketov. Použitie špeciálnych kódov korekcie chýb na úrovni paketov na zníženie situácií, ktoré si vyžadujú opakovaný prenos stratených paketových údajov.
- Hranice kryptografického bloku sú zarovnané s hranicami paketov QUIC, čo znižuje vplyv straty paketov na dekódovanie obsahu nasledujúcich paketov
- Žiadne problémy s blokovaním frontu TCP
- Podpora identifikátora pripojenia, ktorá skracuje čas potrebný na opätovné pripojenie mobilných klientov
- Schopnosť pripojiť pokročilé mechanizmy na kontrolu preťaženia spojenia
- Použitie techniky predpovedania šírky pásma v každom smere na zabezpečenie optimálnej intenzity zasielania paketov, ktorá mu zabráni dosiahnuť stav preťaženia, pri ktorom sa pozoruje strata paketu
- Pozoruhodný výkon a zvýšenie výkonu oproti protokolu TCP. Pre videoslužby, ako je YouTube, vykázal QUIC pri sledovaní videí 30% zníženie operácií opätovného ukladania do vyrovnávacej pamäte.
Ako implementovať modul na podporu HTTP / 3 v NGINX?
Pre tých, ktorí majú záujem o implementáciu tohto modulu na svojom serveri, Môžu tak urobiť podľa pokynov, ktoré zdieľame nižšie.
Ak to chcete zostaviť, len si musia stiahnut patch pre nginx 1.16 a kód knižnice 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 zostavujeme 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
Počas kompilácie musí byť podpora TLS založená na knižnici BoringSSL („–with-openssl = .. / quiche / deps / boringssl“), použitie OpenSSL zatiaľ nie je podporované.
Aby mohli v konfigurácii prijímať pripojenia, budú musieť pridať direktívu poslucháča s príznakom „quic“.