Lighttpd a PHP přes FastCGI

Správa linuxového serveru: Lighttpd a PHP přes FastCGI

Dalším z webových serverů, který se pyšní menší režií a vyšším výkonem, je lighttpd. Tento díl seriálu se bude věnovat představení lighttpd a zprovoznění PHP v tomto serveru prostřednictvím FastCGI.

Úvod

Lighttpd má sice na poli webových serverů relativně nízký podíl (zhruba 0,6 % dle Netcraftu), avšak je používán některými velmi známými webovými službami jako např. Wikipedie nebo YouTube. Lighttpd nabízí vysoký výkon, minimální spotřebu paměti a architekturu vhodnou pro AJAXové (resp. Web 2.0) aplikace. Hodí se však nejenom do prostředí náročných webových aplikací s vysokou návštěvností, ale také třeba na osobní, domácí servery či VPS s málo RAM.

PHP aplikace a webové servery

Řada webových aplikací napsaných (nejen) v PHP je stavěna s ohledem na Apache, což může působit mírné komplikace při nasazení na jiný webový server. Člověk by řekl, že pro aplikaci napsanou v PHP nebo jiném jazyce bude podstatný příslušný interpret a na webovém serveru nebude záležet, ale bohužel tomu tak není. Problém tkví zejména v mechanismech jako rewrite nebo v souborech .htaccess. Řada „alternativních“ webových serverů sice rewrite mechanismy podporuje (včetně lighttpd a Nginx), nicméně jejich syntaxe je odlišná a konvertory bývají vzácné (resp. spíše neexistují). To představuje nutnost pravidla ručně přepsat.

Samotné .htaccess soubory, tedy soubory s lokální konfigurací webového serveru specifickou pro daný adresář (a podadresáře) jsou také specifikem Apache a jinde obvykle nejsou podporovány (to je samozřejmě případ i lighttpd). Příslušná pravidla a úpravy konfigurace je tedy třeba zohlednit v samotné konfiguraci webového serveru.

Webové aplikace využívají těchto dvou mechanismů zpravidla ke dvěma účelům. Prvním jsou „čistá“ nebo „pěkná“ URL (http://www.example.org/index.php?modul=clanky&uzel=354 versus http://www.example.org/clanky/354) a druhým je ochrana citlivých souborů, u kterých by přímý přístup přes web představoval bezpečnostní riziko. Při nasazení webových aplikací na některé z „alternativních“ webových serverů byste měli přinejmenším tuto oblast prozkoumat. U známých a často používaných webových aplikací bývá možné dohledat specifika pro nasazení třeba na lighttpd nebo na jiný webový server, stačí se podívat na web projektu či použít vyhledávač.

Instalace

Instalace samotného webového serveru je velmi jednoduchá, v Debianu postačí již tradičně použít správce balíčků k nainstalování stejnojmenného balíčku:

aptitude install lighttpd

Konfigurace lighttpd

Pokud si ještě vzpomínáte na Úvod do konfigurace Apache, Debian si konfiguraci webových serverů, zejména tedy Apache, přizpůsobuje a strukturuje, aby bylo nastavení a jeho změny co nejjednodušší. V případě lighttpd se to promítá pouze do správy modulů, které je možné „zapínat“ a „vypínat“ prostřednictvím nástrojů lighttpd-enable-mod a lighttpd-disable-mod. Ty pak vytvářejí a ruší symlinky z /etc/lighttpd/conf-available, kde se nacházejí dostupné konfigurační soubory jednotlivých modulů, do /etc/lighttpd/conf-enabled, kde se nacházejí konfigurační soubory, které bude lighttpd brát v úvahu a načte z nich příslušné nastavení.

Hlavním konfiguračním souborem je zde /etc/lighttpd/lighttpd.conf, který je poměrně strohý a obsahuje jen základní nastavení. Určitě si zde přizpůsobte některé z následujících voleb:

PHP

Na rozdíl od Apache nemá lighttpd vlastní „konektor“ pro obsluhu PHP aplikací, nicméně to není problém – můžete použít FastCGI. Za tímto účelem je ovšem potřeba do systému dostat CGI interpret PHP z balíčku php5-cgi, pokud jej ještě nemáte:

aptitude install php5-cgi

Poté je potřeba upravit konfiguraci PHP pro CGI interpret tak, aby byla povolena volba cgi.fix_pathinfo. Upravte tedy soubor /etc/php5/cgi/php.ini a odstraňte středník (uvozující komentář) z řádky s touto volbou. Všimněte si, že konfigurace PHP pro CGI interpret je oddělena od konfigurace PHP pro Apache nebo pro jiná užití, třeba pro PHP interpret pro příkazovou řádku.

Poté je třeba povolit příslušné moduly, konkrétně modul fastcgi a fastcgi-php. Můžete ručně vytvořit příslušné symbolické odkazy, nebo použít nástroje pro obsluhu modulů zmíněné výše:

lighttpd-enable-mod fastcgi
lighttpd-enable-mod fastcgi-php

Nyní už zbývá jen donutit lighttpd znovu načíst konfiguraci:

/etc/init.d/lighttpd force-reload

Otestovat funkci PHP interpretu můžete vytvořením a pokusem o zobrazení libovolného souboru s příponou .php s obsahem (zobrazit by se měl výpis konfigurace PHP interpretu):

<?php phpinfo(); ?>

Pokud chcete nasadit nějakou webovou aplikaci, budete nejspíše potřebovat ještě nějaký databázový server. Instalace databázového serveru byla již probrána v článcích Instalace LAMP (MySQL) a PostgreSQL: Instalace a zprovoznění. Jediné, co je potřeba zajistit kromě instalace databázového serveru, je propojení databáze s PHP interpretem, tedy dostupnost PHP knihoven pro práci s příslušnou databází (balíčky php5-mysql či php5-pgsql).

SSL

Chcete-li zprovoznit přístup k webovému serveru přes HTTPS, čtěte dále. Samotná problematika HTTPS a SSL včetně generování self-signed certifikátů či získání certifikátu zdarma od některé z volných certifikačních autorit byla v tomto seriálu již probrána. Budu tedy předpokládat, že máte k dispozici certifikát s klíčem.

Pokud máte certifikát a klíč ve dvou souborech, spojte je do jediného .pem souboru (určitě nastavte jeho práva tak, aby jej nemohl číst nikdo jiný než webový server!):

cat certifikat.crt klic.key > certifikat.pem

Nyní povolte ssl modul lighttpd:

lighttpd-enable-mod ssl

Ještě před tím, než donutíte webový server znovu načíst konfiguraci, upravte cestu k .pem souboru v /etc/lighttpd/conf-enabled/10-ssl.conf tak, aby odpovídala skutečnému umístění souboru s certifikátem a klíčem. Teprve poté proveďte znovunačtení konfigurace a pokus o připojení přes HTTPS:

/etc/init.d/lighttpd force-reload

Rewrite

Jak už bylo řečeno výše, rewrite pravidla pro Apache nebo jiné servery mají jinou syntax než pravidla pro lighttpd, tudíž je třeba je přizpůsobit. Samotnou dokumentaci k modulu pro rewrite lighttpd naleznete na wiki projektu. Dodám jen, že modul pro rewrite není ve výchozí konfiguraci aktivní, musíte jej povolit v /etc/lighttpd/lighttpd.conf, konkrétně ve volbě server.modules odkomentováním řádky obsahující "mod_rewrite".