Tartalom
Bevezető
A HTTP/2 protokoll gyorsabb webkiszolgálást tesz lehetővé kevesebb adatforgalom mellett. A 2015-ben megalkotott protokoll ugyan már jó pár éve elterjedt, azonban a webkiszolgálók többségében alapértelmezetten nincs bekapcsolva kompatibilitási okok miatt. Többek között nem támogatja a már elavult mod_php Apache modult, ami viszont még sok régi weboldalt működtet, ezért ennek a bekapcsolása, engedélyezése a rendszergazdákra van bízva. Ebben a rövid leírásban megnézzük, hogyan engedélyezhetjük a HTTP/2 protokoll használatát olyan Apache rendszerű webkiszolgálókon, ahol még a régi, HTTP/1.1 protokoll működik.
Alapfeltételek
A HTTP/2 támogatás az Apache 2.4.17-es verziójában került be 2015 októberében, ami a Debian disztribúció esetében a Debian 9 (Stretch) változatban volt először elérhető az Apache 2.4.25-ös verziójában.
Ebben a leírásban elsősorban az ISPConfig-os szervereken történő beállítást nézzük át, mivel ezeken a szervereken már néhány alapfeltétel teljesül. A HTTP/2 protokoll esetén alapkövetelmény a HTTPS kapcsolat használata, ezért a HTTP/2 protokoll LAMP szervereken történő beállításhoz kell még egy köztes lépés, amiben beállítunk egy SSL tanúsítványt, ami ez lehet egy CA (Certificate Authority) által hitelesített példány vagy akár egy "házilag" legenerált (self-signed) tanúsítvány is. Az SSL beállítása nem része ennek a leírásnak, ezt egy külön útmutatóban tekintjük át (ha elkészül ez a leírás, ide fogom majd belinkelni). Azonban ha olyan LAMP szerverrel rendelkezünk, amelyen már be van állítva egy SSL tanúsítvány, akkor azzal is haladhatunk tovább.
Az előzőeknek megfelelően tehát az alábbi szerverek szolgálhatnak alapjául ennek a leírásnak:
- Tökéletes szerver: Debian 9 (stretch) v1.0 (telepítési útmutató | virtuális gép letöltése)
- Tökéletes szerver: Debian 9 (stretch) v1.1 (virtuális gép letöltése)
- Tökéletes szerver: Debian 10 (Buster) v1.0 (telepítési útmutató | virtuális gép letöltése)
- Tökéletes szerver: Debian 10 (Buster) v1.1 (virtuális gép letöltése)
- Tökéletes szerver: Debian 11 (Bullseye) v1.0 (telepítési útmutató)
- LAMP szerverek: Olyan LAMP szerverek, amiken be van állítva az SSL (jelenleg itt az oldalon még nincs ilyen telepítő leírás)
Ezt a leírást a Debian 11 (Bullseye) v1.0 változatán végzem el.
A HTTP/2 protokoll meglétének ellenőrzése
Mielőtt nekiállnánk bármilyen beállítgatásnak, első körben célszerű ellenőrizni, hogy valóban nincs-e már engedélyezve Apache webkiszolgálónkban a HTTP/2, mert előfordulhat, hogy egy újabb Operációs rendszer vagy ISPConfig telepítése során már aktiválásra került, aminek az idő előrehaladtával nő az esélye.
Az ellenőrzéshez nyissunk meg egy weboldalt, vagy bármilyen webes felületet, ami a szerveren fut. Én ehhez a Chrome böngészőt használom, valamint az ISPConfig és phpMyAdmin felületeket, mivel ezen a szerveren nincs egyéb weboldal.
Ha betöltődött a felület, akkor jobb egérgombbal kattintsunk bárhol az oldalon, amire előjön egy menü. Itt válasszuk a legalsó "Vizsgálat" menüpontot (más böngészőkben természetesen más helyeken lehet ez a menüpont). Ekkor a képernyő jobb széléhez, vagy az aljához (beállítástól függően) tapadva előjönnek a webfejlesztő eszközök. Itt van egy vízszintes menüsor, ezen kattintsunk a "Hálózat" menüre. Ekkor bejön egy üres oldal, ahol írja, hogy a Ctrl + R billentyűkkel végezzünk egy lapfrissítést, hogy gyűjthesse az újabb adatokat. Frissítsük tehát az oldalt, de ezt akár szimplán az F5 billentyűvel is kezdeményezhetjük. Ekkor az alábbihoz hasonló felületet láthatunk:
Ha még nem használtuk ezt a részt, akkor előfordulhat, hogy alapból nem jelenik meg a listában a "Protokoll" oszlop. Ehhez a fejléc során kattintsunk jobb egérgombbal és pipáljuk be a Protokoll hasábot, mire az megjelenik a listában.
A Protokoll hasáb mutatja nekünk, hogy milyen HTTP protokollal működik az adott webhely, amit éppen vizsgálunk. Itt láthatunk ilyeneket:
- http/1.1: Ez a régi, HTTP/1.1-es protokoll. Ha a saját erőforrásaink (pl JS, CSS fájlok) mellett ilyet látunk, akkor szükséges ennek a leírásnak a végrehajtása
- h2: Ez a HTTP/2 protokoll, ezt fogjuk engedélyezni, amennyiben még nem ilyeneket látunk itt.
- h2c: A fentebb már említett h2c protokoll szabvány, ami nem követeli meg az SSL titkosítást, azonban használata ritka.
- h3: HTTP/3 protokoll, ez még nagyon új szabvány (2022-es), egyelőre a Google, Facebook meg esetleg pár nagyobb cég használja őket (ezért az ezekről a helyekről betöltődő erőforrások ezzel a protokollal is betöltődhetnek), valamint a böngészők nagy része is támogatja már, ezért jelenhet meg ebben a mezőben, de itt most ezzel nem foglalkozunk.
- chrome-extension: Chrome bővítmény, ez máshogy kerül betöltésre.
- data: Szintén más módon (nem HTTP protokollokkal) betöltődő erőforrás, pl böngésző cache, stb.
- stb...
Amennyiben tehát itt túlnyomó részt http/1.1 állapotokat látunk, akkor folytathatjuk a következő fejezettel.
A HTTP/2 protokoll engedélyezése
Az Apache webkiszolgáló jelenleg háromféle MPM-et (Multi Processing Module) tartalmaz (prefork, worker, event), amelyek nem mindegyike támogatja a HTTP/2 protokollt. Ezért első körben ellenőrizzük, hogy éppen melyik MPM aktív a rendszerben. Ezt az alábbi paranccsal tehetjük meg:
apache2ctl -V | grep -i "mpm"
Alapértelmezetten a "prefork" MPM az aktív, ami a három közül a legelavultabb, ebből következően nem támogatja a HTTP/2-t, mivel egyszerre csak egy szálon tud kéréseket fogadni és feldolgozni, míg a HTTP/2 protokollnak éppen ez az egyik nagy előnye, hogy egyszerre több szálon képes kapcsolódni, egyetlen azonosítási kereten (SSL handshake) belül.
Az MPM modul átváltásához ki kell kapcsolni más Apache modul(okat), valamint bekapcsolni másikakat, és utána válthatunk át a leghatékonyabb MPM-re az event-re.
Először engedélyezzük magát a http2 Apache modult. Ez néhány Linux változatban már be lehet kapcsolva, de azért futtassuk a bekapcsolását. A továbbiakban root-ként haladjunk tovább.
A http2 modul bekapcsolásához tehát adjuk ki az alábbi parancsot.
a2enmod http2
1 2 3 4 5 6 7 8 9 # mod_http2 doesn't work with mpm_prefork <IfModule !mpm_prefork> Protocols h2 h2c http/1.1 # # HTTP/2 push configuration # # H2Push on [...]
Itt két hasznos információt is magunkévá tehetünk:
- Az egyik, hogy a http2 modul nem működik a prefork MPM modullal együtt (ezt le is írja, valamint a konfigurációs blokk feltételben is ki van kötve), tehát kizárják egymást.
- A másik pedig a Protocols sor, amiben a konfiguráció meghatározza a protokollok prioritását. Ebben az esetben tehát az elsődleges prioritás a h2, azaz a HTTP/2 protokoll használata. Amennyiben a kliens program (webböngésző) nem támogatja azt, akkor a h2c, amennyiben ezt sem támogatja, akkor a "fallback" opció a hagyományos HTTP/1.1 szabvány használata. Ezt ugye minden támogatja, ami képes a webre csatlakozni.
Ez a rész azért is fontos, mert az Apache webkiszolgálónknak ez az a pontja, ami meghatározza, hogy használatba is kerüljön a protokoll, ne csak telepítve legyen. Enélkül a kliensek saját házirendjei, beállításai szabják meg, hogy mit használnak. Így ha abban sincs prioritásra emelve a HTTP/2, akkor nem ezen fog megtörténni a kapcsolódás.
Ezután ha van modulként futó PHP példányunk, akkor azt is kapcsoljuk ki. Ezt a PHP verziójának megfelelő modulnévvel tehetjük meg. 7.4-es PHP esetén például:
a2dismod php7.4
De ha itt nem tudjuk melyik verziót kell kikapcsolnunk, akkor az apache2ctl -M paranccsal lekérdezhetjük a bekapcsolt modulok listáját, vagy tovább is léphetünk, mert a modulok be- és kikapcsolgatása során a rendszer úgy is jelzi, hogy ha valamilyen modul ütközik egy másikkal, és azt ki kellene kapcsolni.
Természetesen ez nem egy visszafordíthatatlan művelet, hanem bármikor visszaállíthatjuk rendszerünket a korábbi állapotába.
A következő lépésben kapcsoljuk ki a prefork MPM modult:
a2dismod mpm_prefork
Majd kapcsoljuk be az event MPM modult:
a2enmod mpm_event
Ezután kapcsoljuk be a proxy_fcgi modult:
a2enmod proxy_fcgi
Ha már használunk PHP-FPM-et, akkor ez a modul már be van kapcsolva, mert ez ahhoz is kell. Tehát itt a szituációnktól függően már be lehet kapcsolva ez a modul.
Végül indítsuk újra az Apache-ot:
systemctl restart apache2
Egyben az egész tehát így néz ki:
Ezután ellenőrizhetjük újra az MPM modulunkat:
apache2ctl -V | grep -i "mpm"
Itt már az event MPM modul az aktív.
A HTTP/2 protokoll ellenőrzése
Ha elvégeztük a beállításokat, akkor ismét ellenőrizzük weboldalainkat vagy egyéb webes felületeinket a már ismert módon:
Ha mindent jól csináltunk, akkor a Protokoll oszlopában a h2 jelzések jelennek meg.
Egy másik módja, hogy ellenőrizzük egy weboldal HTTP protokollját, a curl parancs használata:
curl -I --http2 -s <webcím> | grep HTTP
Ahol a kapcsolók az alábbiak:
- -I: HEAD lekérést hajt végre, tehát a lekért weboldalnak csak a fejlécét kéri le.
- --http2: HTTP/2 protokollt használjon
- -s: Silent mód, nem rak ki mindenféle adatforgalmi statisztikákat.
A parancs visszaadja a protokollt, és a kiszolgálótól kapott válaszkódot.
Konklúzió
A HTTP/2 protokoll modernebb, hatékonyabb és gyorsabb webkiszolgálást biztosít, mint elődje, ezért erre a szabványra érdemes átváltani, amennyiben rendszerünk megfelel a HTTP/2 követelményeinek. A beállítása nem bonyolult, és a használata során szerver és hálózati erőforrásokat spórolhatunk meg.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 209 megtekintés