Podmínky
Konfigurace lighttpd se točí kolem podmínek. Jak jsme si řekli v minulých dílech, lighttpd se nastavuje ovlivňováním proměnných, a do tohoto procesu můžeme zasáhnout podmínkami. Není proto problém, aby pro každý web platila úplně jiná konfigurace serveru. Podmínky se zapisují v následujícím tvaru:
$HTTP["..."] == "..." {
...
}
else $HTTP["..."] == "..." {
...
}
Větev else můžeme vynechat. Proměnné, které lze s něčím porovnávat, se nachází v následující tabulce:
Proměnná | Obsahuje |
---|---|
$HTTP[„cookie“] | Cookie |
$HTTP[„host“] | Doména (část url před lomítkem) |
$HTTP[„useragent“] | Identifikace prohlížeče |
$HTTP[„referer“] | Odkud návštěvník přišel |
$HTTP[„url“] | Část url za lomítkem |
$HTTP[„querystring“] | Část url za „?“ |
$HTTP[„remoteip“] | IP adresa návštěvníka |
$HTTP[„scheme“] | „http“ nebo „https“ |
$SERVER[„socket“] | IP adresa serveru (pro vhosty založené na IP adresách) |
Pro porovnávání s naší hodnotou můžeme využít operátory „==“ (rovná se), „!=“ (nerovná se), „=~“ (odpovídá regulárnímu výrazu) a „!~“ (neodpovídá regulárnímu výrazu).
Více podrobností o podmínkách lze nalézt v dokumentaci.
Virtual hosting
Provozování více webových prezentací na jednom serveru je s lighttpd hračka. Je tu ale i nevýhoda, že všechny weby běží pod jedním uživatelem. To znamená, že se hodí spíše pro potřeby jednotlivců než velké skupiny lidí a o mass hostingu nemůže být ani řeč. Ve spojení s FastCGI a podobnými technologiemi tato nevýhoda odpadá.
V článku budu používat pojem „virtual host“, zkráceně „vhost“.
Čtyři možnosti jak rozdělit jednotlivé weby si ukážeme v následujících bodech.
Podmínkový vhost
Tou nejjednodušší a nejflexibilnější cestou je použití podmínek:
$HTTP["host"] == "domena1.cz" {
# nastavíme document-root
server.document-root = "/var/www/domena1.cz/"
# ale můžeme použít i jiná nastavení, třeba:
dir-listing.activate = "disable"
accesslog.filename = "/var/log/lighttpd/domena1_cz.log"
}
Na rozdíl od níže popsaných způsobů, lze s podmínkovými vhosty provozovat virtual hosty nejen na základě doménových jmen, ale i IP adres.
Simple vhost
Další 3 možnosti včetně této už vyžadují použití modulů. Jednu z nich zajišťuje modul mod_simple_vhost. Ten umí „mapovat“ domény do nějakého adresáře. To znamená, že když máme vytvořený adresář třeba „/var/www/domena1.cz“, tak pokud do prohlížeče zadáme „domena1.cz“, objeví se nám web nebo obsah ze zmíněného adresáře. Nastavení se může podobat tomuto:
simple-vhost.server-root = "/var/www"
simple-vhost.document-root = ""
#simple-vhost.server-root + $HTTP["host"] + simple-vhost.document-root
Vytvoření dalšího webu se pak rovná vytvoření buď adresáře ve „/var/www“ nebo symlinku odkudkoli do „/var/www“.
Více podrobností o mod_simple_vhost lze nalézt v dokumentaci.
Enhanced vhost
Pokročilejší formou vytváření virtual hostů zajišťuje modul „mod_evhost“. Ten dovoluje nastavit větší detaily u adresářové struktury. Principem je, že si někde v systému vytvoříme adresář, například „/var/www“ a pomocí dalších proměnných vytvoříme místo, kde budou uloženy webové stránky. To se hodí, pokud například chceme pro každý web oddělit adresář se soubory pro web, pro fotky a třeba i pro logovací soubory. Adresářová struktura pak může vypadat nějak takto:
/var/www/domena1.cz/www/default
/var/www/domena1.cz/www/www
/var/www/domena1.cz/www/
/var/www/domena1.cz/www/
/var/www/domena1.cz/logs
/var/www/domena1.cz/albums
Jak jsem zmínil, nastavení se provádí pomocí proměnných:
%% => reprezentuje znak %
%0 => doména + tld (domena1.cz)
%1 => tld (cz)
%2 => doména (domena1)
%3 => doména třetího řádu řádu (uzivatel.domena1.cz)
%4 => doména čtvrtého řádu (web1.uzivatel.domena1.cz)
Více podrobností o mod_evhost lze nalézt v dokumentaci.
Nastavení pak vypadá například takto:
evhost.path-pattern = "/var/log/%0/%3"
Zadáme-li například do prohlížeče „http://www.domena1.cz/“, podle tohoto nastavení se použije adresář „/var/log/domena1.cz/www“. Může se ovšem stát, že takový adresář neexistuje. V tom případě se použije pouze „/var/log/domena1.cz“.
Mysql vhost
Poslední podobnou možností je použití databáze MySQL k uchovávání dat o vhostech. Jedná se o jednoduché nastavení přístupu a definování SQL dotazu, který vybere potřebná data. O tuto funkcionalitu se stará modul „mod_mysql_vhost“.
Nastavení vypadá takto:
mysql-vhost.db = "databaze"
mysql-vhost.user = "jmeno"
mysql-vhost.pass = "heslo"
mysql-vhost.sock = "/var/run/mysqld/mysqld.sock" # socket k mysql
mysql-vhost.sql = "SELECT Doc_Root FROM lighttpd WHERE Host='?';" # příklad sql dotazu
První tři položky by měly být jasné. Proměnná „mysql-vhost.sock“ obsahuje soubor s unixovým socketem. Další položkou se předává SQL dotaz, kde je znak „?“ nahrazen názvem domény. Dotaz vrátí document-root. Pokud MySQL není na lokálním stroji, lze místo socketu použít „mysql-vhost.hostname“ a „mysql-vhost.port“.
Více podrobností o mod_mysql_vhost lze nalézt v dokumentaci.
Userdir
Určitě každý z vás narazil občas na adresu ve tvaru „http://domena1.cz/~uzivatel“. Na tyto případy má lighttpd zvláštní modul s názvem „mod_userdir“. Ten umí namapovat požadavky směřující směrem „~uzivatel/neco“ například na „/home/uzivatel/adresar/neco“. Nastavení lze udělat i takové, že adresář určený ke zveřejnění není založen na záznamu o uživateli v „/etc/passwd“, ale nachází se třeba ve „/var/www/uzivatele“.
Nastavení pro tento modul je dobré kombinovat s podmínkou, která zajistí, že uživatelé nebudou přístupní z jiných domén než těch, které chceme.
$HTTP["host"] == "domena1.cz" {
userdir.path = "www"
userdir.include-user = ("root", "user1", "uuser22")
#následující řádek použijeme, pokud chceme mít data mimo reálné home adresáře
#userdir.basepath = "/var/www/uzivatele/"
}
Pokud si nepřejeme, aby některý uživatel měl možnost využívat této vlastnosti web serveru, můžeme použít proměnné „userdir.include-user“ a „userdir.exclude-user“ k filtrování.
Proměnná „userdir.include-user“ obsahuje uživatele, kteří jsou povolení pro tuto službu. Pokud je proměnná prázdná, jsou povolení všichni. V druhém případě je to „userdir.exclude-user“. Ta obsahuje uživatele, kteří jsou zakázaní a pokud neobsahuje žádné, jsou taktéž povolení všichni.
Více podrobností o mod_mysql_vhost lze nalézt v dokumentaci.
Závěr
Lighttpd obsahuje široké možnosti nastavení pro virtual hosty. Všechny moduly lze navzájem kombinovat nebo jejich platnost omezit jen na určité množství domén. V příštím a pravděpodobně posledním článku o lighttpd se podíváme na některé moduly, které se svými funkcemi už nedají sloučit do jednoho tématu, ale přesto jsou svým způsobem užitečné, a ukážeme si, jak generovat konfiguraci skriptem.