nginx-h2o

Bye Bye NGINX, Hello H2O

Nginx 2022. okt 10.

Soha nem volt titok, hogy a bitlords nginx reverse proxy-t használ. Az a helyzet, hogy én mindig is az nginx-re esküdtem, mivel nem csak gyors és stabil, de még nagyon alacsony erőforrás igényei is vannak ellenben társaival. Ez a blog 2 darab dedikált szerveren fut ami összesen 8 darab AMD EPYC processzor magot tartalmaz és 16gb ram-ot. Mondanom sem kell, hogy ez bőven nem sok. Ennek ellenére az nginx használatával olyan Layer 7-es ddos támadásokat tudtam kiszűrni amik a ghost cms számára teljesen végzetesek lettek volna. Ezt onnan tudom, hogy régebben ez a blog cloudflare mögött volt, és addig nem is volt semmilyen probléma, minden hasított. Ez annak volt köszönhető, hogy erős cloudflare tűzfal beállításokat hoztam létre. Ám de egyszer csak úgy döntöttem cloudflare nélkül folytatom tovább az életet ezért a szükséges tennivalók után levettem a cloudflare proxy-t az oldalról és "szűzen" ment ki a világ felé az oldal... Nem tartott sokáig. Az a helyzet, hogy amint védelem nélkül került ki a blog azonnal kapta is szegény a Layer 7-es ddos támadásokat. Ez azt eredményezte, hogy a ghost cms egyszerűen nem tudta tartani az iramot és leállt. Ekkor konfiguráltam be az nginx-et kicsit jobban, hatékonyabban. Folyamatos Layer 7-es ddos támadással teszteltem az új konfiguráció hatékonyságát amivel nagyon szép eredményeket értem el. A blog elérhető maradt mindenki számára támadás alatt is, a 2 darab szerver processzor használta pedig maximum a 20%-ot verdeste.

Szeretném megjegyezni, hogy azóta más védelemmel is előálltam amiről ebben a cikkben nem fogok írni.

Az NGINX jelenlegi hátulütője.

Az nginx-nek egy hatalmas nagy problémája van. Nincs normális http/2 implementáció. Ez annyit takar, hogy egyszerűen nem tud http/2-vel a back-end felé proxyzni. Rossz ez nekünk? Háát igazából nem rossz, csak nem hatékony. Hiába képes a ghost cms a http/2-re, az nginx mindenféleképpen http/1.1-es verzióval fog csatlakozni hozzá. Megpróbálom elmagyarázni dióhéjban miért jobb a http/2 mint a http/1.1

Képzeljük el, hogy egy étteremben vagyunk, rendeltünk steaket, főzeléket és valamit inni. A pincér a rendelésünket külön, külön hozza ki. Előbb kihozza a steaket, majd visszamegy, kihozza a főzeléket, újra visszamegy és végül kihozza az innivalónkat. Gondolom észlelhető, hogy ez nem valami hatékony, tehát idő igényes. Ez a http/1.1

Képzeljük el ugyanezt a felállást de ahelyett, hogy a pincér 3szor fordulna mire minden rendelésünket kihozná, egyszerre kihozza a steaket, a főzeléket és az innivalónkat is. Mennyivel gyorsabb, nem igaz? Ez a http/2

Nahát, így már elég problémásnak tűnik az az nginx reverse proxy. De igazából akkora probléma nincs ezzel, rengetegen használják ezt, rengeteg forgalommal és probléma nélkül. Ettől még persze kétségen kívül jól jönne az a http/2 támogatás, de mivel nincs, más irányba kellett nézelődnöm.

Találkozásom a  H2O-val.

Teljesen véletlen műve, hogy rátaláltam a H2O-ra. Az a helyzet, hogy én firefox-ban használom a Wappalyzer plugint ami képes detektálni a weblapon használt technológiákat. Böngésztem egy weblapot és rákattoltam a Wappalyzer ikon-ra, hogy megnézzem milyen alapokon fut az az oldal. Érdekes módon nem jelzett semmilyen webszervert ami érdekes, hiszen általában olyanokat szoktam látni, hogy NGINX,Apache,Caddy...

Kíváncsiságból megnyitottam a fejlesztői beállításokat és megnéztem a server header-t. Itt találkoztam a h2o-val amiről eddig nem is tudtam, hogy létezik. Gyorsan utána is néztem, hogy mi is ez és oooo boooy. Örülök, hogy rátaláltam.

A Wappalyzer github oldalán már toltam is egy "Technology request"-et, hogy képes legyen ezt is detektálni.

Na de mi ez a H2O?

Gyorsan fel is pattintottam docker-ben és elkezdtem vele kísérletezni. Megismertem a konfigurációs file-t ami az nginx-től FÉNYÉVEKKEL jobb és átláthatóbb (nekem). Elkezdtem a teljesítményét tesztelni és érdekes módon fej-fej mellett vannak az nginx-el. Most gondolhatnád, hogy hát... akkor nem is olyan érdekes, miért használjak H2O-t, ha az nginx ugyan olyan teljesítményre képes? Hát ez egy teljesen jogos kérdés, de megtudom válaszolni! Azért mert a H2O képes http/2 reverse proxy-ként működni. Tehát, ha visszagondolunk az éttermes példára akkor már le is esik, hogy sokkal hatékonyabb.

Azt még megemlíteném, hogy már próba fázisban http/3 reverse proxy is van benne... :O

Változások a blog back-end-el kapcsolatban.

Szóval úgy döntöttem, hogy a bitlords nginx-es élete lassan véget fog érni és H2O-val fog folytatódni. Bár most is nagyon gyors az oldal hiszen több helyen fut illetve több helyen van cache-elve de NEM ELÉG GYORS. Tudom tudom, 200msec igazából észre sem vehető, dehát a maximalista hozzáállás az én perverzióm :(

A jövőben le fogom cserélni az nginx-et és végelegesen H2O-ra fogok váltani. A személyes rövidke tapasztalataim alapján mind a kettő csodásan szuperál, de a http/2 támogatás miatt jobban preferálom a H2O-t.

Végszó

Én nagyon szépen köszönöm, hogy elolvastad ezt a cikket. Amennyiben bármilyen kérdésed van, esetleg csak szeretnél egy IT-s közösségbe tartozni, ne habozz és csatlakozz discord szerverünkhöz amihez az oldal tetején és alján találsz meghívót.

H2O:

H2O - the optimized HTTP/2 server
GitHub - h2o/h2o: H2O - the optimized HTTP/1, HTTP/2, HTTP/3 server
H2O - the optimized HTTP/1, HTTP/2, HTTP/3 server. Contribute to h2o/h2o development by creating an account on GitHub.

Tagek