I když dnes naleznete mnoho binárních či zdrojových distribucí www serveru Apache, které se nainstalují prakticky bez nutnosti zásahu, je častým problémem, zvláště u prvních experimentů, uzpůsobit si konfiguraci serveru k obrazu svému. V následujících třech příspěvcích vás seznámíme, jak dostat Apache pod svoji kontrolu.
Obvykle stačí přečíst „dokumentaci“ přímo v konfiguračním souboru httpd.conf u každé z konfiguračních direktiv, ale jednak to vyžaduje angličtinu a také častokrát nekonečnou trpělivost, pokud hledáte jedno obrácené lomítko, zapomenutou čárku či tečku.
V seriálu se budu zabývat základní návodem nastavení www serveru Apache pro první experimenty, tedy tvorbu vlastního www serveru se zaměřením na nastavení v režimu „hraji si na lokálním počítači„. Nebude chybět exkurze po nastavení adresářů a několik „triků“ pro používání virtuálních serverů a nesouvislých diskových prostorů. Třídílný seriál prochází krok za krokem jednotlivé direktivy konfiguračního souboru Apache a popisuje jejich význam a funkci včetně příkladů na místech, kde je to nezbytné.
Nehledejte zde řešení problémů, týkajících se pokročilého nastavení Apache, jako je například využití Apache v roli www proxy serveru (mod_proxy), konfigurace zabezpečení, interní přepisování URL (mod_rewrite), automatické překódování češtiny (mod_czech) či šifrovaná komunikace (mod_ssl). Ne, že bych to neuměl, ale svojí obsáhlostí jsou tato témata mimo rámec a požadavky základního použití. V případě zájmu je možné, že v seriálu budu pokračovat a tyto problémy řešit.
Instalace Apache
Prvním krokem je získání Apache, nejčastěji v binární distribuci přímo z oficiálního serveru (www.apache.org/dist/). Obvykle je doprovázena instalačním programem nebo alespoň inteligentním rozbalovacím programem, který se vyptá přinejmenším na místo, kam má soubory nainstalovat. V následujících příkladech budu uvažovat hlavně instalaci na Win9x platformě. Vlastní server bude umístěn do adresáře X:APACHE a pro dokumenty publikované na serveru se v příkladech předpokládá disk I. Odlišnosti od tohoto schématu je nutno řešit individuálně a občas upravit absolutní cesty v konfiguračním souboru. Pro zjednodušení budu předpokládat, že se vám podařilo binární distribuci nainstalovat a máte k dispozici v příslušném adresáři mezi adresářovou a soborovou strukturou i soubor apache.exe, který tvoří základ serveru (uživatelé Unixu budou hledat nejspíše soubor /usr/local/bin/httpd).
Pokud se rozhodnete stáhnout si zdrojové kódy a kompilovat si je sami, potom tento návod nejspíše nepotřebujete a raději si přečtěte README přímo ve zdrojových kódech.
Konfigurace httpd.conf
Díky svému „dědictví“ z unixového prostředí se nastavení provádí přes konfigurační soubory uložené v čitelné textové podobě v podadresáři ./conf instalovaného stromu Apache (pro Unix je to obvykle /etc/httpd/conf/), z nichž nejdůležitější je httpd.conf obsahující jádro celého nastavení serveru. Jeho obsah s popisem nejdůležitějších direktiv si nyní popíšeme.
Sekce 1 – Global Environment
Sekce globálního nastavení ovlivňuje základní nastavení serveru , jako jsou režim běhu a také umístění konfiguračních souborů či počet souběžných dotazů, které server zároveň vyřizuje.
Typ serveru rozlišuje režim standalone (samostatný) nebo inetd (součást služby inetd dostupné jen na Unix platformách). Pro naše účely bude nejvhodnější režim první.
Adresář, ve kterém je umístěn strom adresářů Apache pro konfiguraci, zápisy událostí, chyb apod. Od tohoto adresáře se posléze odvozují relativní adresáře pro konfigurační. Uvědomte si, že nejde o místo, kde je nainstalován spustitelný soubor Apache, ale o adresář obsahující nastavení, byť v případě Win platformy lze s úspěchem obojí držet v jednom (na Unix platformách obvykle /etc/httpd ).
Důležité upozornění: v konfiguraci se jak na Win, tak na Unixu používají klasická lomítka při zápisu adresářů! Navíc na konci lomítko být nesmí!
Soubor, do kterého si server ukládá identifikační číslo svého procesu, když startuje. Praktické využití je asi pouze na Unix systémech, kde se díky tomuto souboru zjišťuje číslo procesu pro restart či zaslání signálu k ukončení běhu serveru apod.
ScoreBoardFile „logs/apache_status“ |
|
Soubor, do kterého si Apache ukládá interní informace. Není to vždy zapotřebí, ale pokud se vám tento soubor vytvoří při běhu, musíte zajistit, aby se v případě vícenásobného spuštění serveru nesdílel stejný soubor. Stručně řečeno, každá instance serveru potřebuje svůj vlastní ScoreBoardFile, na což si musíte dát pozor při psaní jednotlivých konfiguračních souborů.
Počet vteřin, po jejichž uplynutí se předpokládá přerušení spojení.
Aktivuje tzv. persistentní spojení, kdy může prohlížeč při jednom spojení žádat více dotazů. Velmi to urychlí přenos, neboť klient nemusí otevírat zbytečně spojení a v jednom sledu může stáhnout jak stránku, tak i např. obrázky do stránky vložené.
Maximální počet dotazů povolených během jednoho persistentního spojení. Čím více, tím větší výkon serveru. Pokud zadáte nulu, povolíte neomezený počet dotazů na jedno spojení, ovšem otevíráte cestu k zahlcení serveru, pokud by více klientů tahalo „nekonečné“ množství dotazů.
Jak dlouho se udržuje otevřené persistentní spojení, než dojde další dotaz. V praxi je to doba, do které musí dojít od stejného klienta na jednom spojení další dotaz, aby se vyřídil v rámci jednoho persistentního spojení.
MinSpareServers 8 MaxSpareServers 32 |
|
Nastavení týkající se většinou pouze Unix platformy, které určuje, kolik „čekajících“ instancí serverů bude čekat v době nečinnosti. Výsledkem je zrychlení odezvy, než kdyby se proces vytvářel teprve až na základě dotazu. Drobnou nevýhodou je zvýšení zatížení systému a odčerpání části systémových zdrojů.
Počet serverů, které se vytvoří po spuštění serveru. Důvody a vlastnosti jsou stejné, jako u předchozích direktiv MinSpareServers a MaxSpareServers.
Maximální počet současně běžících procesů serveru, čímž se vlastně limituje i maximální počet současných spojení. Není vhodné nastavovat příliš nízké číslo, jinak při zatížení mnoho klientů buď nepříjemně „zatuhne“ při čekání na spojení a nebo rovnou nahlásí chybu připojení. Na druhou stranu tato direktiva nastavuje omezení počtu procesů, po jehož překročení by se server začal přespříliš zpomalovat, takže by nakonec nedokázal např. v limitu (viz timeout) vyřizovat přicházející dotazy. Konkrétní nastavení tedy záleží na výkonu počítače, na kterém server běží.
Maximum dotazů vyřízených potomkem Apache serveru. Obvykle nastaveno na nulu, což znamená bez omezení, ale u platforem, kde dochází k únikům paměti, je to cesta, jak po určité době proces zrušit, uvolnit jím okupovanou paměť a založit nový proces.
Omezení maximálního počtu programových „vláken“, která vyřizují dotazy. Čím více povolíte, tím více současných požadavků se vyřizuje. O to více se ale zatíží systémové zdroje a vlastní zpracování se vzhledem k multitaskingu odpovídajícím způsobem zpomalí.
Listen 3000 Listen 12.34.56.78:8 |
|
Pro začátek ne moc důležitá direktiva, která určuje, na kterých adresách či portech bude server naslouchat přicházejícím dotazům navíc k základnímu nastavení. První varianta určuje pouze port, druhá přímo IP adresu včetně portu. Využití najde spíše na systémech s více síťovými kartami či adresami. Na okraj – tohle je direktiva, kterou se aktivuje v případě podpory SSL, aby server naslouchal i na portu pro https:// , což dosáhnete přidáním direktiv:
<IfDefine SSL> Listen 443 </IfDefine> |
|
Tuto část je nutné zadat až za sekci nahrávající moduly (DSO). Navíc je zde vidět i jednu z direktiv „podmíněných“, které umožňují podmíněné zpracování konfiguračního souboru, podle zjištěného prostředí. Další podobnou direktivou je např. direktiva <IfModule>
BindAddress * BindAddress 192.168.0.1 BindAddress apache.server.net |
|
Určuje, na kterých adresách Apache server naslouchá. Tato direktiva je důležitá, pokud chcete provozovat více virtuálních serverů na jednom počítači. Uvedením hvězdičky určujete, že se přijímají požadavky ze všech dostupných IP, které jsou na příslušném počítači nakonfigurovány. Jinak lze specifikovat vybranou IP adresu a nebo plnohodnotné jméno serveru (přeložitelné přes DNS server na IP adresu).
Definuje, zda má server generovat úplný přehled svého stavu, pokud se použije „handler“ server-status nebo server-info. O těchto „ovladačích“ událostí si povíme někdy příště.
Dynamic Shared Objects (DSO)
Prostor, ve kterém lze k vlastnímu serveru nahrát přídavné moduly, které zajišťují rozšíření funkcí. Konfigurace těchto direktiv a modulů je momentálně nad rámec článku a v případě zájmu se k nim můžu vrátit v některém z pokračování, pro začátek je asi nejlepším řešením obejít tuto sekci kurzorem velkým obloukem.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.