Szerző: roberto

2002. június 29. 00:09

A világ második legnépszerűbb nyílt forráskódú webszervere

Ha linuxos webszerverről van szó, a legtöbben azonnal az Apache-ra gondolnak. Kétségtelen, hogy az Apache a legnépszerűbb webszerverszoftver napjainkban, most azonban mégsem az Apache-ról, hanem egy jóval kisebb, szerényebb tudású, de méltatlanul mellőzött programról, a thttpd-ről szeretnénk egy rövid áttekintőt adni.

Ha linuxos webszerverről van szó, a legtöbben azonnal az Apache-ra gondolnak. Kétségtelen, hogy az Apache a legnépszerűbb, és a legtöbb site-on használt webszerverszoftver napjainkban, most azonban mégsem az Apache-ról, hanem egy jóval kisebb, bizonyos szempontból valóban szerényebb tudású, de szerintem méltatlanul mellőzött programról, a thttpd-ről szeretnék egy rövid áttekintőt adni.

Thttpd-vel a világ összes webszerének körülbelül 1 százalékána fut, a Netcraft webszerver-statisztikáiban a program kiemelt helyen utoljára egy éve szerepelt, a 2001-es év május havi adatai szerint a thttpd-felhasználók akkori aránya akkor 1,29% volt. Egy éve tehát a thttpd volt a hetedik leggyakrabban használt webszerverszoftver (jelenleg a nyolcadik), a nyílt forráskódú szerverek közül pedig a második. Ennek az "előkelő" 1,29%-os részesedésnek a visszaszerzésére már igen kevés az esély, ugyanis a webszerverek két legnépszerűbbike, az Apache és a Microsoft IIS folyamatosan szorítja ki a vetélytársakat a küzdőtérről, az elmúlt hónapban ez a két szoftver futott az aktív site-ok csaknem 92 százalékán. Az új webszerver-telepítések során szinte kizárólag a két domináns szoftver közül szokás választani, pedig az adott feladathoz lehet, hogy egy egyszerűbb -- és könnyebben kezelhető -- program is megfelelő lenne.

A thttpd a legtöbb rendszergazda számára számára teljesen ismeretlen, ez nem is csoda, hiszen a szabad operációs rendszereken az Apache uralkodik. Az utóbbi egy évben történt egy kis felpezsdülés, izgalmas új technológia tört be a linuxos világba -- persze valódi hatásokról még nem beszélhetünk. A 2.4-es kernel megjelenésével felbukkantak a kerneles webszerver-technológiákra épülő megoldások: a khttpd és a Red Hat Tux nevű szervere. A kernelszintű httpd-gyorsítás azonban inkább csak kiegészítője a felhasználói térben futó démonoknak, a statikus tartalmat a kernel egyszerűen a hálózati eszközre másolja, míg a dinamikusan összeálló tartalomra irányuló kéréseket továbbítja a webszerver-démonnak. Talán ez a webszerver-technológiák jövője, ez a cikk mégis egy teljesen felhasználói térben futó démonnal foglalkozik, amellyel csaknem olyan hatékonyan működtethetjük webszerverünket, mint a kerneles technológiát alkalmazó társaival.

[oldal:Érdemes fordítani]

Bár az oldal címe óriási kínokat sejtet, nem kell mágusnak lennünk ahhoz, hogy beüzemeljük a thttpd webszervert. Abba viszont bele kell törődnünk, hogy a disztribúciók legtöbbje nem tartalmazza a program binárisát (ha igen, akkor is csak valami özönvíz előtti verziót), így a legegyszerűbb, ha azt magunk állítjuk elő a forráskódból. A cikk írásának pillanatában a legfrissebb változat a 2.23-as verzió első bétája, erre mutat az előző link, de esetleg érdemes személyesen is ellátogatni a program honlapjára, hogy megbizonyosodjunk arról, hogy valóban az utolsó változatot használjuk. Megpróbálkozhatunk a stabilnak címkézett 2.20-as verzióval is, a cikk során azonban végig a legújabb kóddal fogunk dolgozni, ugyanis számos javítást és több fontos új lehetőséget is tartalmaz (ilyen új lehetőség például a félóránkénti státuszjelentés a rendszernaplón keresztül). A letöltés után első dolgunk a letöltött forráskód kicsomagolása legyen, majd lépjünk bele a forráskód könyvtárába.

A fordítás előtt érdemes átszerkeszteni a forrásfa gyökerében lévő config.h fájlt, amelyben számos később már nem módosítható beállítást végezhetünk el. Ha tervezzük CGI programok futtatását, akkor a CGI_TIMELIMIT értékét módosíthatjuk az alapértelmezett 30 másodpercről 60-ra, esetleg még többre, ugyanis a 30 másodpercből könnyen kifuthatunk komplex CGI szkriptekkel megoldott feladatok esetén. Ugyanitt állítható be azoknak a fájlneveknek a mintája, amelyeket a szerver egy könyvtárra való hivatkozás során megpróbál kiszolgálni (INDEX_NAMES, értéke tipikusan "index.html", "index.htm"). A további opciókról vagy magában a fájlban, vagy a thttpd weboldalán olvashatunk, de általában az alapértékek megfelelőek.

Ezek után a hagyományos configure, make, make install parancssorozattal el is végezhetjük a fordítást:

[~]# gzip -dc thttpd-2.23beta1.tar.gz|tar -xvf -
[~]# cd thttpd-2.23beta1
[thttpd-2.23beta1]# ./configure --prefix=/usr/local/thttpd
...
[thttpd-2.23beta1]# make
...
[thttpd-2.23beta1]# make install

Az utolsó parancs a konfigurálás során megadott könyvtárba telepíti a szoftvert; sajnos a thttpd nem támogatja a make install-strip paranccsal való telepítést, így a hibakeresés során használt szimbólumokat egyenként kell eltávolítanunk a telepített bináris állományokból a strip paranccsal (ne feledkezzünk meg a $prefix/www/cgi-bin-ben lévő programokról sem!).

A totális kontrollra vágyó felhasználók számtalan egyéb opciót találnak config.h-ban, akiket pedig a szerver alapértelmezett hibaüzeneteinek bordó háttere, vagy a könyvtárlisták zöld háttere zavarna, azok a libhttpd.c fájlban végezhetik el a szükséges módosításokat.

[oldal:Indítás előtt]

A sikeres fordítás és telepítés után elkezdhetjük a szoftver konfigurálását. Alapvetően két lehetőségünk van: a thttpd démon indításakor átadhatjuk a program számára a szükséges argumentumokat, vagy készíthetünk egy konfigurációs fájlt, amelyben áttekinthető módon, akár kommentárokkal fűszerezve szerepelnek beállításaink. Mi az utóbbi módszerrel fogunk most foglalkozni, a parancssori opciókról a thttpd man oldalában találunk részletes leírást.

Még mielőtt elmélyednénk a konfigurációs fájl részleteiben, érdemes létrehoznunk egy thttpd nevű felhasználót a rendszeren, a webszerver az inicializálás után erre a felhasználóra fog átváltani a root felhasználóról, biztonsági szempontból mindenképp előnyös, ha egy szolgáltatás saját, dedikált felhasználóval fut. Az új felhasználót a következő paranccsal vehetjük föl:

/usr/sbin/useradd -d /dev/null -s /bin/false thttpd

Ha elkészült az új felhasználónk, készíthetünk neki egy könyvtárat is, de nem a szokásos /home alatt, hanem a /var/log könyvtárban. A változatosság kedvéért legyen a könyvtár neve thttpd, ide fog kerülni a szerver naplója. A könyvtárat adjuk a thttpd nevű felhasználónak, és akár el is kezdhetjük a konfigurációs állomány szerkesztését. A thttpd meglehetősen érzékeny a konfigurációs fájl formátumára, a fájlba nem vehetünk föl üres sorokat, egy sor vagy egy opciót vagy megjegyzést tartalmaz. A legegyszerűbb, ha egyből meg is nézzük, hogyan fest egy érvényes konfigurációs fájl:

###########################################
#                                         #
# /usr/local/thttpd/etc/thttpd.conf       #
# THTTPD konfigurációs állomány           #
# az opciókról a "man thttpd" parancs     #
# ad tájékoztatást                        #
#                                         #
###########################################
port=80
dir=/usr/local/thttpd/www
nochroot
user=thttpd
logfile=/var/log/thttpd/access.log
pidfile=/var/run/thttpd.pid
cgipat=/cgi-bin/*

A fájlt nekünk kell a semmiből létrehoznunk (touch thttpd.conf), majd feltöltenünk a kívánt értékekkel. A port segítségével azt a TCP portot adhatjuk meg, amelyre ráül a szerver, ez a legtöbb esetben a 80-as lesz. A dir a web felé mutatott könyvtárszerkezet gyökere, minden fájl és könyvtár, amit ebben a könyvtárban helyezünk el, látható lesz a böngészőprogramokból (persze csak akkor, ha jól be vannak állítva az attribútumok). A nochroot hatására a program nem chroot-ol a dir-ben megadott könyvtárba az indulása után, ezt csak akkor kapcsoljuk be, ha olyan CGI programokat szeretnénk futtatni, amelyeknek a www könyvtáron kívüli dolgokra is szüksége van (pl. perl interpreter). Ha nem kívánunk CGI szkripteket futtatni, akkor javasolt a konfigurációs fájl chroot opciójának használata. A logfile a webszerver tevékenységéről vezetett naplófájl helyét adja meg, ebben a fájlban csak a HTTP-kéréseket, illetve az azokra adott válaszokat naplózza a rendszer a szokásos formátumban, magának a thttpd démonnak az üzenetei a syslogon keresztül a /var/log/messages fájlba kerülnek. A pidfile önmagában nem túl hasznos, a thttpd processzazonosítóját fogjuk megtalálni az itt megadott fájlban, erre csak akkor lehet szükségünk, ha a disztribúciónk initszkriptjeihez illeszkedő indítószkriptet is gyártunk a programhoz. A cgipat pedig egy általános CGI minta; azok a fájlok, amelyekre illik a cgipat és megfelelően be vannak állítva a jogosultságaik, CGI programokként futtathatóak lesznek.

Ezek a legfontosabb opciók, a program természetesen ezernyi apró lehetőséget tartalmaz, ezekkel most nem foglalkozunk, inkább próbáljuk meg elindítani:

/usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/etc/thttpd.conf

Ha a böngészőnket a http://localhost/ címre irányítjuk, és megjelenik a www könyvtárunk tartalma, nyert ügyünk van. Amennyiben valami mégsem sikerült volna, megnézhetjük az üzeneteket a rendszernaplóban, a top vagy a ps paranccsal pedig megvizsgálhatjuk, hogy fut-e thttpd néven valami.

[oldal:Királyság]

A thttpd apró mérete ellenére is sok lehetőséggel rendelkezik. A HTTP protokoll 1.1-es verzióján kívül ismeri a CGI 1.1-et, az SSI-t (Server Side Includes), támogatja az IPv6-ot, jelszavas oldalakat készíthetünk vele (erre való a csomagban lévő htpasswd program), de talán a legnagyszerűbb tulajdonsága, amellyel más webszerverek nem rendelkeznek, az a forgalomszabályozás (szelep). E lehetőség segítségével URL-ekere és URL-csoportokra definiálhatunk egy byte(!)/másodpercben megadott értékeket, amit a szerver semmilyen körülmények között nem fog átlépni. A funkció használatához fel kell vennünk a konfigurációs állományba a throttles=/usr/local/thttpd/etc/thttpd.throttles opciót, és létre kell hoznunk a /usr/local/thttpd/etc/thttpd.throttles fájlt.

A forgalomszabályozási fájl szintaxisát szintén a thttpd kézikönyvoldala írja le, a fájl szerkezete nem túl bonyolult, először azt az URL-mintát kell megadnunk, amelyre a korlátozás vonatkozik (pl. a "**" minden fájlra fog vonatkozni, míg a "**.jpg|**.gif|**.png" csak a képfájlokra), utána pedig az adott mintához társított byte/másodperc értéket kell definiálnunk. Ne szerénykedjünk, a korlátozásokat akár fájlonként is megadhatjuk, így lehetnek olyan állományaink, amelyeket nagyobb sebességen kínálunk, míg másokhoz akár vérlázítóan alacsony értéket is megadhatunk. Az alábbi minta a webszerverünk összes fájljához 6000 byte/szekundumban határozza meg a hozzáférést:

# /usr/local/thttpd/etc/thttpd.throttles
**      6000

A szerver egyébként részben e tulajdonságáról kapta a nevét, a thttpd t-je tetszőlegesen behelyettesíthető a tiny, turbo és throttling szavakkal. A szoftver nagy site-okon ritkán szokott felbukkanni, viszont gyakran találkozhatunk vele csak képeket kiszolgáló szervereken. Meglepő, de a program használata földrajzilag is erősen korlátozott. A Netcraft adatai alapján a thttpd-n futó 379059 site-ból 334332 a "uk" felsőszintű domain alá van bejegyezve. Az Egyesült Királyság egyébként is elég speciális helyzetű a webszerverek tekintetében: itt készül a világ harmadik/negyedik legnépszerűbb webkiszolgálója, a Zeus Web Server (kereskedelmi termék), ám a szigetországban az Apache (52.46%) és a Microsoft IIS (20.08%) után a thttpd (11.67%) következik a telepítések számát tekintve.

A szoftver üdítően kevés erőforrást igényel, az egyetlen hátránya talán az, hogy a szerveroldali szkriptelési lehetőségei némileg kötöttek, az alapértelmezett felépítés csak a CGI-t és az SSI-t támogatja, a PHP-t csak a 4-es verziótól kezdve lehet úgy fordítani (még a thttpd lefordítása előtt), hogy támogassa a thttpd-t. Remélem, hogy e rövid ismertető olvastán a magyar rendszergazdák is fordítanak egy kis időt a thttpd kipróbálására, megéri.

Kubernetes képzéseinket már közel 300 szakember végezte el. A nagy sikerre való tekintettel a tanfolyamot aktualizált tananyaggal június 18-án újra elindítjuk! A 8 alkalmas, élő képzés képzés órái utólag is visszanézhetők, és munkaidő végén kezdődnek.

a címlapról