Hlavní navigace

Lighttpd: lehký webserver

Adam Štrauch

Ve spojení s web serverem se často slýchá o balíku Apache nebo IIS. I když mají tito dva konkurenti mezi sebou rozdělenou většinu webového trhu, nejsou zdaleka jedinými. Stává se, že možnost masivní konfigurace není jedinou prioritou a pokud se projekt rozrůstá a zabírá pořád víc a víc systémových prostředků, nastupuje lighttpd.

Úvod

Od tohoto mini seriálu by možná někdo očekával i srovnání s ostatními web servery, ale tomu bych se rád vyhnul. Tam, kde se nasazují Apache a IIS, se lighttpd nikdy nedostane a stejně tak to platí obráceně. Lighttpd je velmi rychlý a spolehlivý web server. Nedosahuje ovšem možností konfigurace, jakou má zmíněný Apache. Je navržen tak, aby zůstal jednoduchým a rychlým web serverem. Nasazuje se na místech, kde by Apache zahltil svoji prací celou paměť, nebo tam, kde není potřeba komplexní řešení, vystačíme si s jednoduchou konfigurací a případný výkonnostní nárůst bude spíše bonus než požadavek.

Historie

Začátky vývoje hezky mapuje pár odstavců na hlavní stránce web serveru. Když Jan Kneschke psal v roce 2003 svoji diplomovou práci a dostal se podle svých slov k té nejnudnější části, kterou bylo napsání dokumentace, rozhodl se trochu odlehčit napětí a vytvořit tzv. proof-of-concept k problému c10k popsaný Danem Kegelem. Zjistil, že když na svém počítači pustí simulaci se stovkou paralelních přístupů k web serveru Apache, ten vyčerpá veškerou paměť a přejde ke swapu. První týdny to byl pouze návrh nového web serveru, začátky implementace základních vlastností a hlavně cachování. Také byla přidána podpora pro PHP, protože ho Jan Kneschke používal ve svých projektech a dokonce dopsal i možnost rozdělení zátěže mezi další web servery. Když měl napsán tento základ web serveru, rozhodl se porovnat výkonové výsledky s paralelními přístupy s dalšími web servery a výsledky byly pro jeho web server velmi dobré.

Vývoj pokračovat dál a do dnešního dne se nezastavil. To, co začalo pouhou hrou, se stalo během posledních pár let velmi oblíbeným lehkým web serverem.

Koncept a jeho nevýhody

Ač je lighttpd velmi výkoný a ve většině případů se nestane brzdou provozu na serveru, i přes to tu ta možnost je. Na rozdíl od Apache je lighttpd jednoprocesový (single-process) a jednovláknový (single-threaded). To znamená, že operační systém prakticky nemá šanci přidělit pro lighttpd více než jedno procesorové jádro. Na první pohled tato koncepce vypadá hrozivě, ale není. V praxi je velmi časté, že webová prezentace neběží „uvnitř“ web serveru, ale má svůj vlastní proces. Lighttpd podporuje všemožná *CGI, tam se jedná vždy o jeden či více procesů/threadů a operační systém může v klidu rozdělovat čas všech jader mezi jednotlivé aplikace. Vlákna, případně více procesů ve web serveru by systému zbytečně přidělávalo režii. Lighttpd ukázalo nejen v testech, ale i v ostrém provozu (youtube.com, mininova.org, isohunt.com, wikipedia) kde se zatížení pohybuje v tisících požadavků za vteřinu, že takovýto nápor uživatelů vydrží.

Hlavní vlastnosti

Modulárnost

Veškerá pokročilá funkcionalita se rozdělila do modulů. Díky tomu lze web server optimalizovat přesně pro ty účely, kterým má sloužit. Také to přináší výhody v rozšiřování nejen vývojovým týmem, ale i samotnými uživateli, bez razantního zásahu do samotného kódu web serveru.

Rychlost

S cílem, se kterým lighttpd vznikl, se stále nerozešel a pořád se jedná o jeden z nejrychlejších web serverů, který mohou uživatelé na svých serverech nasadit.

Paměťová nenáročnost

Lighttpd vychází z jiné koncepce než Apache a jemu podobní. Proto i po několikadenním obsluhování požadavků je obsazená paměť relativně malá, řádově jednotky MB.

Cachování

Lighttpd svoji rychlost nabírá díky masivnímu internímu cachování a také díky mod_cache. Tento modul umí získávat data v pravidelných intervalech od služby poskytující dynamický obsah a servírovat ho z cache web serveru. Tím se rapidně zvýší výkon celé aplikace. Samozřejmě se tento modul nedá použít na celý projekt, ale s trochou snahy se dá velmi kvalitně optimalizovat celý webový projekt.

Jednoduchost

Jednoduchý konfigurační soubor s mnoha „bonusy“, které si popíšeme v příštích dílech, a které dělají z lighttpd velmi flexibilní nástroj, se dá dostat „pod palec“ během pár desítek minut. Lighttpd také disponuje velmi kvalitní dokumentací a s ní dokáže tento web server nastavit pro své potřeby opravdu každý.

*CGI

Největší silou lighttpd je podpora různých *CGI protokolů (cgi, fastcgi, scgi). Ty slouží ke komunikaci s externími aplikacemi jako je třeba PHP, django projekt či RoR projekt. V porovnání s Apachem, lighttpd nedisponuje alternativou k jeho mod_php, ale výkon, který tento modul nabízí, se vyrovná kombinaci lighttpd+fastcgi+php.

Generování skriptem

Veškerá konfigurace lighttpd může být vygenerována skriptem, resp. výstup skriptu bude vložen do konfiguračního souboru. To dává velké možnosti hlavě při vytváření administrace (přidávání „subwebů“, nastavování sdílení dat přes HTTP protokol atd.) nějakého projektu.

Základní konfigurace

A aby dnešní článek nebyl jen holou teorií. Nastavíme si lighttpd na servírování obsahu jednoho z adresářů na disku. Začneme samotnou konfigurací:

#moduly, které se mají načíst
server.modules = ("mod_accesslog","mod_dirlisting")

#uživatel a skupina, pod kterými pojede lighttpd
server.username            = "lighttpd"
server.groupname           = "lighttpd"
server.use-ipv6            = "enable" #povolení IPv6
server.errorlog-use-syslog = "enable" #použít syslog na logování chyb
accesslog.use-syslog       = "enable" #použít syslog na logování přístupu
server.indexfiles          = ("index.html", "index.htm")
server.document-root       = "/home/cx/share" #kde má mí web server /
server.dir-listing         = "enable" #povolit vylistování obsahu adresáře

include "mime-types.conf" 

Tohle je základ pro jednoduchý web server. Běží pod vlastním uživatelem, zapisuje do hlášení syslogu (nejjednodušší řešení) a zobrazuje obsah adresáře. Poslední řádek je závislý na distribuci. Na Gentoo funguje právě to, co jsem napsal. Jinde to bude obdobné. Tímto zápisem vložíme do konfiguračního souboru soubor mime-types.conf, který obsahuje vazby koncovka-mimetyp. Pro ukázku použití základního nastavení web serveru není nezbytný.

Závěr

Používám lighttpd na svém serveru přes rok a za tu dobu s ním nebyl jediný problém. Nastavení je otázka několika minut a v kombinaci s generováním konfiguračních souborů skriptem není problém udělat jednoduchou administraci prakticky pro jakoukoli činnost, kterou by měl web server vykonávat. V příštím díle se podíváme na pokročilou konfiguraci s podmínkami a nastavíme *CGI spojení mezi lighttpd,PHP a Pythonem.

Našli jste v článku chybu?