Správa linuxového serveru: Webový server Cherokee

Nejpoužívanějším webovým serverem je Apache. Existuje však celá řada dalších webových serverů s řadou zajímavých vlastností. Jedním z nich je rychlý a „uživatelsky přívětivý“ webový server Cherokee. A právě ten vám představím v tomto dílu.

Úvod

Cherokee zaujme hned v několika oblastech. V první řadě se jedná o server vyvíjený s velkým důrazem na výkon, měl by tedy být rychlejší než Apache, alespoň ve výchozím nastavení a v určitých situacích (jeden drobný benchmark naleznete v odkazech pod článkem). Webových serverů s důrazem na výkon existuje samozřejmě více, např. Lighttpd či Nginx. Cherokee má ovšem také vlastnost, která je u unixových webových serverů relativně unikátní – webové GUI. Cherokee tedy můžete nastavit pohodlně přes webové administrační rozhraní, alespoň z větší části. Díky tomu je možné uvažovat o Cherokee nejenom pro produkční server, ale také pro testovací stroje vývojářů, i když tam bude Cherokee soutěžit s balíkem XAMPP, který obsahuje Apache, MySQL, PHP a Perl v jedné instalaci.

Instalace

Samotná instalace webového serveru Cherokee je v Debianu velice jednoduchá, postačí nainstalovat Cherokee z distribučních repozitářů:

aptitude install cherokee

V případě jiných distribucí by to mělo jít obdobným způsobem, Cherokee je už poměrně zaběhnutý a známý projekt.

Webové rozhraní

Jak už bylo zmíněno výše, Cherokee se konfiguruje přes webové rozhraní. Konfigurační soubor samozřejmě existuje a sídlí v /etc/cherokee/cherokee.conf. I když je možné jej ručně upravovat, není to doporučeno a samotný soubor neobsahuje prakticky žádné komentáře. Je rozhodně lepší a pohodlnější použít webové rozhraní. Za tímto účelem je třeba administrační webové rozhraní nejprve nahodit, k čemuž slouží následující příkaz:

cherokee-admin

Po spuštění tohoto příkazu se vám objeví výpis podobný tomuto:

Login:
  User:              admin
  One-time Password: ewXpVKjHp2LQbi6v

Web Interface:
  URL:               http://127.0.0.1:9090/

Cherokee Web Server 1.0.8 (Jan 12 2011): Listening on port 127.0.0.1:9090, TLS
disabled, IPv6 enabled, using epoll, 4096 fds system limit, max. 2041
connections, caching I/O, single thread

Jak je patrné, webové rozhraní běží na portu 9090 místní smyčky (localhost). Stejně tak je patrné, že vám byly přiděleny jednorázové přihlašovací údaje, které můžete použít k přihlášení do webového rozhraní (to je chráněno klasickou HTTP autentikací).

Úvodní obrazovka administračního webového rozhraní CherokeeÚvodní obrazovka administračního webového rozhraní Cherokee

Pokud vám server běží na localhostu místního počítače, není to problém, stačí spustit prohlížeč a zadat URL http://127.0.0.1:9090/. Běží-li vám server na vzdáleném počítači, máte dvě možnosti. Buď použijete SSH tunel a namapujete si vzdálený port 9090 na místní port, nebo webové rozhraní pustíte na síť, ale v takovém případě by bylo vhodné jej nějakým způsobem ochránit. Zmíněný SSH tunel můžete vytvořit takto:

ssh -N -f user@server -L 9090:127.0.0.1:9090

Pokud se rozhodnete pro druhou variantu, použijte parametr -b a specifikujte IP adresu, na které má cherokee-admin naslouchat, takto:

cherokee-admin -b 4.3.2.1

Před tím by ovšem bylo vhodné daný port zabezpečit, aby se k němu nemohl připojit někdo jiný. Za tímto účelem můžete použít linuxový firewall (Netfilter) a konfigurační nástroj iptables a provést něco podobného tomuto:

iptables -I INPUT -p tcp --dport 9090 -j REJECT
iptables -I INPUT -p tcp --dport 9090 -s 1.2.3.4 -j ACCEPT

Jen pro informaci, každé z těchto pravidel se vždy přidá na začátek řetězu (parametr -I), proto jsou pravidla zapsána v „obráceném“ pořadí. První pravidlo, které skončí jako druhé, zakáže přístup na port 9090. Druhé pravidlo, které skončí jako první, povolí přístup na port 9090 z IP adresy 1.2.3.4.

Samotné konfiguraci se příliš věnovat nebudu, neboť s grafickým (resp. webovým) rozhraním by nastavení mělo být relativně intuitivní. Porty a IP adresy pro naslouchání specifikujete na kartě General | Ports to listen. Virtuální servery se konfigurují na kartě vServers. Pro každý virtuální server můžete mít vlastní Document root (záložka Basics u zvoleného virtuálního serveru) a řadu pravidel pro zpracování obsahu (záložka Behaviour). To, který virtuální server se vám zobrazí za kterých okolností, nastavujete na kartě Host match. Můžete specifikovat jméno, wildcard (např. *.example.org), IP adresy či regulární výrazy.

Konfigurace virtuálních serverů v CherokeeKonfigurace virtuálních serverů v Cherokee

Po jakékoliv změně nezapomeňte konfiguraci uložit klepnutím na Save vpravo nahoře. Pokud bude potřeba restart, nabídne vám Cherokee několik možností – nerestartovat, provést bezpečný restart a restartovat natvrdo. Určitě zkuste nejdříve Graceful restart.

PHP

Jelikož Cherokee přistupuje k PHP přes rozhraní CGI, je potřeba nainstalovat balíček php5-cgi a ujistit se, že v souboru /etc/php5/cgi/php.ini je řádka s následujícím obsahem:

cgi.fix_pathinfo=1

Nastavení PHP v Cherokee je uživatelsky přívětivé, jen je důležité vědět, odkud začít. Klepněte na kartu vServers a zvolte si požadovaný virtuální server. Podívejte se na kartu Behaviour a klikněte na tlačítko Rule Management. V levém horním rohu rozhraní vytvořte nové pravidlo klepnutím na New. Měl by se spustit průvodce, který vidíte na obrázku níže. Zvolte Languages a následně PHP. Klepněte na Add a následně na Create. Konfiguraci nezapomeňte uložit, popřípadě server restartovat. Tím by mělo být nastavení hotové – můžete jej zkusit zkontrolovat vytvořením testovacího souboru s příponou php a obsahem:

<?php phpinfo(); ?>

Průvodce pro konfiguraci PHP interpretu v CherokeePrůvodce pro konfiguraci PHP interpretu v Cherokee

Dodám, že webové rozhraní Cherokee se poměrně dost měnilo mezi jednotlivými verzemi. Tento návod je určen pro Debian Squeeze a Cherokee 1.0.8. U jiných verzí může být rozvržení webového rozhraní Cherokee mírně odlišné.

Cherokee a SSL

Konfigurace SSL v Cherokee přívětivá rozhodně není, alespoň v případě Debianu Squeeze. Správce očekávající jednoduché nastavení pak může skončit v e-mailové konferenci Debianu s domněnkou, že podpora pro SSL/TLS nebyla do balíčků Cherokee zakompilována, i když opak je pravdou.

Jako první krok nainstalujte knihovnu libssl pro Cherokee. Ta není v závislostech Cherokee, takže nebyla nainstalována společně s ním. To můžete provést následujícím příkazem.

aptitude install libcherokee-mod-libssl

Poté byste měli nastavit SSL/TLS port. Klepněte na General | Network. U položky SSL/TLS back-end vyberte z rozbalovacího seznamu možnost OpenSSL / libssl. Nyní už můžete nastavit SSL port na kartě Ports to listen. Přidejte port 443 a zaškrtněte u něj políčko TLS/SSL port.

V tuto chvíli zbývá už jen přiřadit certifikáty jednotlivým virtuálním serverům (karta Security u zvoleného virtuálního serveru). Práce s certifikáty již byla v tomto seriálu popsána, konkrétně v článku o konfiguraci Apache. Cherokee implicitně využívá SNI (Server Name Identification), takže můžete hostovat více virtuálních serverů s různými certifikáty na jedné IP adrese. Problém s touto metodou je v (ne)podpoře ze strany některých prohlížečů na některých operačních systémech (viz seznam na Wikipedii). Pokud prohlížeč nepodporuje SNI, Cherokee mu pošle certifikát, který je přiřazen k výchozímu virtuálnímu serveru.

Více informací o nastavení SSL/TLS v Cherokee naleznete na webu projektu.

Paměťová náročnost a OpenVZ

Z mého testování vyplynula poměrně nepříjemná informace – i když je Cherokee paměťově nenáročný (z hlediska reálně zabrané paměti), rezervuje si velké hodnoty virtuální paměti (neboť spouští poměrně hodně vláken), což na fyzickém stroji nevadí, ale může to vadit u některých virtualizačních řešení, zejména u těch založených na kontejnerech (OpenVZ atd.). Tam se totiž tato paměť, byť nevyužitá, započítává do paměťové kvóty. Nejrychlejším řešením je minimalizovat počet vláken – v konfiguraci Cherokee je to karta Advanced | Resources a položka Thread Number (nastavte třeba na 1). V článku na lowendbox.com je navrženo ještě jiné, možná trošku krkolomnější, nicméně také velmi účinné řešení. Dodám, že na Xenu či KVM tento problém není.