Jiří Meitner | IT služby Linux | Kladno | Česko

A wide-angle image of a whimsical IT professional coding a Caddy web server. The scene shows the IT expert with an excited and focused expression

Upgrade webového serveru: Přechod na nejnovější HTTP/3 s Caddy

Logo webového serveru Caddy

Pro modernizaci webových serverů je klíčový přechod na nejnovější webové standardy, jako je HTTP/3. Tento standard nabízí nejen vyšší bezpečnost a snadnější konfiguraci, ale také rychlejší načítání stránek a lepší odolnost vůči ztrátám paketů. Zjistěte, jak můžete tyto výhody využít s Caddy – moderním webovým serverem, který je připraven na HTTP/3.

Představení moderního internetového protokolu HTTP/2

HTTP/2 je významným vylepšením oproti svému předchůdci, HTTP/1.1. Tento protokol byl standardizován v roce 2015 a přinesl několik klíčových vylepšení pro zvýšení efektivity a výkonu webové komunikace.

Mezi hlavní vlastnosti HTTP/2 patří:

Binární protokol: Na rozdíl od textového protokolu HTTP/1.1 je HTTP/2 plně binární, což znamená, že komunikace mezi klientem a serverem je efektivnější a méně náchylná k chybám interpretace.

Multiplexing: HTTP/2 umožňuje odesílat a přijímat několik zpráv současně přes jedno TCP spojení. To eliminuje problém takzvaného „head-of-line blocking“, který se vyskytoval v HTTP/1.1, kde musely být požadavky zpracovány v pořadí, v jakém byly přijaty.

Prioritizace požadavků: HTTP/2 umožňuje klientům specifikovat prioritu pro jednotlivé požadavky, což umožňuje serveru lépe optimalizovat zpracování a odesílání dat.

Komprese hlaviček: HTTP/2 zavádí efektivnější metodu pro kompresi hlaviček HTTP požadavků a odpovědí, což snižuje celkové množství přenášených dat.

Server Push: Tato funkce umožňuje serveru aktivně odesílat zdroje klientovi předtím, než o ně klient explicitně požádá, což může zlepšit časy načítání stránek.

Představení moderního internetového protokolu HTTP/3

HTTP/3 je nejnovější evolucí protokolu HTTP, přinášející zásadní vylepšení oproti svým předchůdcům. Tento protokol, postavený na základech QUIC, nabízí nejen rychlejší načítání a vyšší odolnost proti ztrátám paketů, ale také zlepšuje bezpečnost a spolehlivost. Klíčovým prvkem HTTP/3 je šifrování nejen samotných dat, ale i metadat, která byla dříve posílána otevřeně. Tato vlastnost poskytuje ochranu proti odposlechu a manipulaci s daty, což zvyšuje bezpečnost přenosu.

Webových serverů, které umožňují používání tohoto protokolu zatím není mnoho. Jedním z nejlepších je Caddy.

Srovnávací tabulka protokolů HTTP/1.1, HTTP/2 a HTTP/3

VlastnostHTTP/1.1HTTP/2HTTP/3
Transportní protokolTCPTCPQUIC přes UDP
MultiplexingNeAno (Binární rámcová vrstva)Ano (Binární rámcová vrstva)
Server PushNeAnoAno (podobně jako HTTP/2, ale s rámci jako PUSH_PROMISE, MAX_PUSH_ID a CANCEL_PUSH)
Komprese hlavičkyNeHPACKQPACK (umožňuje samostatné jednosměrné proudy pro správu stavu)
ŠifrováníVolitelné (často s TLS)Zpravidla TLS, s výjimkou h2c a hlavičekPovinné (integrované s QUIC), včetně metadat
Odolnost proti Změnám SítěNeNeAno
Porovnání protokolů HTTP/1.1, HTTP/2 a HTTP/3

Jak nainstalovat moderní webový server Caddy

Instrukce pro různé OS naleznete v dokumentaci: https://caddyserver.com/docs/install

Níže uvedu příkaz, který vám nainstaluje nejnovější caddy na systému Debian

Caddy: Moderní a Efektivní Webový Server

Caddy je webový server nové generace, který se vyznačuje snadnou konfigurací, automatickým nasazením SSL/TLS certifikátů přes Lets Encrypt a plnou podporou moderních protokolů HTTP/2 i HTTP/3. Není potřeba žádný certbot, Caddy se o certifikáty postará sám. Caddy překonává technologický dluh tradičních serverů, jako jsou Apache a Nginx, a nabízí modernější a efektivnější přístup. Caddy je napsaný v jazyce GO na zelené louce. A je to asi nejkomfortnější webový server, který se můžete naučit.

Caddyfile – jednoduchá konfigurace webového serveru v jediném souboru

Caddy umožňuje používání api, kterému se zatím nebudeme věnovat, protože s tím nemám zatím zkušenosti. Dále umožňuje konfiguraci v jsonu či v jednodušším Caddyfile, který se jsonu trošku vizuálně podobá. Pro správu veškerých webů vám stačí jeden Caddyfile (/etc/caddy/Caddyfile). Tento přístup mému použití plně vyhovuje.

Základní konfigurace HTTP/2 a HTTP/3 v Caddyfile, na začátek souboru dáme následující blok:

Další věc, která se mi na Caddy web serveru líbí, je logování, které může být strukturované v jsonu. Logování se budeme věnovat v sekci Caddyfile a snippety.

Caddy má skvělou dokumentaci, kterou při vytváření webů doporučuji používat: https://caddyserver.com/docs/caddyfile#the-caddyfile

Caddyfile a snippety

Snippety jsou znovupoužitelné bloky kódu, abychom se nemuseli opakovat. Říkal jsem, že se mi na Caddy webserveru líbí logování? Tak takhle vypadá můj logovací snippet:

Logovací snippet

Jak je vidět, jméno snippetu je v závorkách a ve složených závorkách je k němu jeho nastavení.

Snippety se do konfigurace poté importují přes import.

Jednoduché přihlášení

Caddy podporuje jednoduché přihlášení (Basic Auth), tak jako apache, ale trošku jiným způsobem. Nepoužívá .htpasswd soubory. Nyní si ukážeme, jak vypadá snippet s přihlášením.

Hash hesla získáme příkazem

yes 'heslo123'|caddy hash-password
$2a$14$Z7r89DNih.WfqMbw9K/vkuSfp7pQi10ws1MND4KsktZ1hbJtOCFNKCode language: PHP (php)

Případně postačí jen hash-password a interaktivně zadat heslo a jeho potvrzení (to je bezpečnější).

Snippety pro přesměrování z www na holou doménu a obráceně

Moderní komprese Zstandard a Brotli v Caddy

Kompresní algoritmy zstd a brotli jsou skvělé pro webové stránky hlavně z několika důvodů:

Efektivita Kompresního Poměru:

Brotli: Vyvinutý Googlem, je obzvláště efektivní pro textová data jako HTML, CSS a JavaScript. Brotli poskytuje výrazně lepší kompresní poměr než jeho předchůdci (např. gzip), což znamená menší velikost souborů a rychlejší načítání stránek.

Zstd: Vyvinutý Facebookem, zstd (Zstandard) je také velmi efektivní v kompresi a má vynikající rychlosti komprese a dekomprese. Zvláště se hodí pro velké soubory a nabízí lepší kompresní poměry než tradiční metody, jako je gzip.

Rychlost Kompresního Algoritmu:

Brotli: Kromě vysokého kompresního poměru je brotli také optimalizován pro rychlost, což znamená, že komprese a dekomprese probíhají rychle, minimalizují zatížení serveru a zkracují čas načítání stránek pro uživatele.

Zstd: Rychlost je klíčová vlastnost zstd. Je navržen tak, aby byl rychlý jak při kompresi, tak dekompresi, což znamená efektivnější zpracování na serverech a rychlejší načítání pro klienty.

Široká Podpora a Kompatibilita:

Brotli je dobře podporován v moderních prohlížečích a má širokou kompatibilitu, což z něj činí bezpečnou volbu pro webové stránky.

Zstd se stává čím dál tím více populárním a je podporován v mnoha systémech a aplikacích.

Využití v Caddy Webserveru:

Caddy umožňuje používání těchto kompresí pro předkomprimované soubory, což znamená, že webový server může efektivně spravovat komprimovaný obsah bez dodatečného zatížení během každého požadavku. To vede k optimalizaci výkonu a snížení nákladů na šířku pásma.V kombinaci tyto faktory přinášejí výrazná vylepšení ve výkonu a efektivitě pro webové stránky, zejména v prostředích, kde je optimalizace šířky pásma a rychlosti načítání kritická. Komprese za běhu – nepředkomprimovaných souborů je možná do ZSTD a do GZIPu. Komprese předomprimovaných souborů je možná do brotli, zstd, i gzipu. Pro aplikaci předkomprese je nutné nejen zapnout precompressed ve file_server v Caddyfile, ale i nahrát předkomprimované soubory vedle nekomprimovaných do root složky vašeho webu. Nebojte se, že by předkomprimované soubory caddy znovu komprimoval, jako je to běžné například při neoptimálním nastavení webserveru Apache.

Snippet pro statické stránky s podporou komprese zstandard, brotli a gzip:

Všiměte si, že v rámci tohoto snippetu importuji snippet loging a www_redirection. Snippety mohou obsahovat jiné snippety. Pokud máte hodně skupin webů, které jsou podobné – třeba více statických webů, weby, kde caddy bude fungovat jako reverzní proxy (pro transmission, cockpit, shellinabox, pihole …) a weby s php atd, tak se hodí mít pro každý typ vhodný snippet.

Nyní si vytvoříme první web:

exampledomain.cz, www.exampledomain.cz {
        import shared_settings_static
        import strip-www exampledomain.cz
        root * /var/www/vhosts/exampledomain.cz
}Code language: JavaScript (javascript)

A to je celé.

Všimněte si, že měním hlavičku Server na ITisLove. Webový server by o sobě měl dle mého názoru práskat z bezpečnostních důvodů co nejméně informací (kdyby se objevila nějaká zranitelnost). Caddy web server není zatím příliš rozšířen, takže dalším bonusem je méně útoků. Příště si ukážeme Caddy jako reverzní proxy pro bittorent klienta Transmission, pro cockpit (pro správu serverů v Linuxu) a pihole (dns server pro blokování reklam a škodlivých stránek s webovým rozhraním). A taky práci s logem.

A wide-angle image of a whimsical IT professional coding a Caddy web server. The scene shows the IT expert with an excited and focused expression
A wide-angle image of a whimsical IT professional coding a Caddy web server. The scene shows the IT expert with an excited and focused expression
Summary
Upgrade webového serveru: Přechod na nejnovější HTTP/3 s Caddy
Article Name
Upgrade webového serveru: Přechod na nejnovější HTTP/3 s Caddy
Description
Převedeme váš webový server na nejnovější standardy s pomocí HTTP/3. Zjistěte, jak využít výhody rychlejšího načítání a vyšší odolnosti s Caddy, moderním serverem připraveným na HTTP/3
Author
Publisher Name
ITisLove.cz
Publisher Logo

Comments

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..