Hlavní navigace

Jak na konfigurační soubor Apache

19. 2. 2007
Doba čtení: 4 minuty

Sdílet

V minulém článku jsme se zabývali autentizací a ovládáním Apache. V dnešním se zaměříme na konfiguraci obecně. Ukážeme si syntaxi konfiguračních souborů a seznámíme se s pomocnými nástroji, které lze při konfiguraci použít. Konfigurace jako taková si zasluhuje naši pozornost proto, že každá editace s sebou nese riziko chyb.

Soubory

Apache obecně se konfiguruje textově – vkládáním direktiv do konfiguračního souboru. Komplexní distribuce Linuxu obsahují jednoduché klikací nástroje usnadňující nastavení domácího serveru. Instalátor pro Windows se vás optá alespoň na doménu, ServerName a adresu administrátora. Nenáročným uživatelům průvodci jistě postačí, ale chcete-li používat webserver profesionálně, bez vimu a konfiguračních souborů se neobejdete.

Main Apache conf

Grafický nástroj v Mandrivě

Konfiguračním souborem může být conf/httpd.conf, který konfiguruje celý server (všechny adresáře, hostitele atd.) nebo skrytý soubor .htaccess nacházející se v nějakém adresáři. .htaccess konfiguruje chování serveru pro konkrétní adresář, jméno tohoto souboru můžete nastavit direktivou AccessFileName. V historických verzích projektu Apache se vyskytují soubory conf/srm.conf a conf/access.conf.

Direktivy

Ke každé direktivě se váže několik pravidel, které musíte bezpodmínečně dodržet, aby fungovala, jak chcete. Za prvé sem patří syntaxe. Syntaxe je šablona, podle níž se vytvářejí příkazy (definuje počet a typ argumentů). Dále tzv. kontext, který říká, kam lze direktivu vložit. Např. direktiva Script může být napsána na samostatném řádku httpd.conf, uvnitř <VirtualHost> a </VirtualHost>, nebo <Directory> a </Directory>, ale ne v souboru .htaccess. Některé direktivy jsou zabudovány logicky v jádru Apache (např. Listen), jiné jsou použitelné teprve po zavedení nějakého rozšiřujícího modulu – např. ty autentizační. Situaci navíc komplikuje skutečnost, že některé moduly jsou standardně zavedeny nebo zkompilovány v Apache (autentizační modul). Přehledný detailní popis všech direktiv najdete pod odkazem Directive Quick Reference v dokumentaci. Každá direktiva zde má uvedený účel, syntaxi, implicitní argumenty, kontext, v němž má být uvedena, status (na kolik je v Apache zabudována) a modul (část programu, v níž se nachází). Logicky, ServerName a ServerAdmin budou mít vyšší váhu než Alias nebo FilesMatch. Direktivy označované termínem server-wide nastavují celý server, případně virtuálního hostitele.

Za server-wide lze označit:
1) direktivy omezující zátěž – LimitRequestBody, LimitRequestFields, LimitRequestFieldsize, LimitRequestLine, RLimitCPU, RLimitMEM, RLimitNPROC ThreadStackSize
2) direktivy udávající cestu ke klíčovým souborům resp. adresářům – DocumentRoot, ErrorLog, LockFile, PidFile, ScoreBoardFile, ServerRoot
3) direktivy identifikující server –  ServerName, ServerAdmin, ServerSignature, ServerTokens, UseCanonicalName, UseCanonicalPhysicalPort

DALŠÍ MOŽNOSTI A PRAVIDLA

Stejně jako v programovacích jazycích můžete svoji práci rozdělit do několika souborů a pak slepit dohromady (podobně jako funguje direktiva #include v C++). Je to typické u serverů s vyšším počtem hostitelských adres, neboli virtuálních hostitelů s oddělenými DocumentRooty, Aliasy atd. Mějme webový server provozující www.cyklistika.cz, www.behani.cz a www.plavani.cz. Každé z těchto stránek mají spoustu vlastní konfigurace – několik řádků textu. Plavani.cz má svůj konfigurační soubor conf/vhosts/pla­vani.conf s následujícím obsahem:

#definice virtualniho hostitele
<VirtualHost *:80>
    ServerName www.plavani.cz
    ServerAlias plavani.cz
    DocumentRoot /www/plavani
    AuthUserFile /hesla/duverne/hesla.txt
    Require user Frank
    #… a dalsi
</VirtualHost>

Obsah conf/vhosts/cyklistika.conf a conf/vhosts/behani.conf je obdobný.Výsledek by se pak slepil následujícím řádkem.

Include conf/vhosts/*.conf

Takovýmto kódem lze přidávat nového hostitele vytvořením dalšího souboru s příponou .conf v adresáři conf/vhosts. Dejte si pozor, ne vždy můžete použít hvězdičku v argumentu Include. Zástupné znaky jsou implementovány až ve verzi 2.0.41 a pozdějších!

Konfigurační soubory obsahují jednu direktivu na řádek. Je zde možno roztáhnout direktivu na více řádků – napíšete-li na poslední místo řádku zpětné lomítko, direktiva pokračuje dalším řádkem. Bezprostředně za zpětným lomítkem musí následovat znak nového řádku. Komentáře se uvozují křížkem (#). Každý za ním uvedený znak až do konce řádku je ignorován. Pro přehlednost můžete odsazovat řádky tabulátorem – tabulátor má stejný význam jako mezera nebo prázdný řádek. Doporučuje se také označit si ucelené části souboru nějakým komentářem a oddělit je několika řádky.

Postupujte pomalu

Změny jsou akceptovány pouze po startu či restartu. Nejste-li si jisti, doporučuje se provádět změny v konfiguraci postupně a testovat je po malých krůčcích. V případě, že používáte nové direktivy, s nimiž jste se dosud nesetkali, podívejte se do dokumentace.

Doporučuji používat v nesnázích apachectl configtest. Výstup je až neuvěřitelně srozumitelný.

root_podpora

# apachectl configtest
[Wed Jun 2 11:45:30 2004] [warn] NameVirtualHost 66.100.167.44:80 has no VirtualHosts
[Wed Jun 2 11:45:30 2004] [warn] module mod_hfs_apple.c is already added, skipping
[Wed Jun 2 11:45:30 2004] [warn] module mod_macbinary_apple.c is already added, skipping
[Wed Jun 2 11:45:30 2004] [warn] module mod_sherlock_apple.c is already added, skipping
[Wed Jun 2 11:45:30 2004] [warn] module mod_php4.c is already added, skipping
…
# apachectl configtest
Syntax error on line 403 of /etc/httpd/httpd.conf:
Group takes one argument, Effective group id for this server

Například administrátor v prvním výpisu použil NameVirtualHost pro jistou IP adresu a port a nedefinoval pro ni žádné hostitelské jméno. Dále se snažil zavést 4 moduly, které jsou již zavedeny. Tyto přehmaty generují pouze varování, takže démon poběží. Ovšem ve druhém výpisu, kde došlo k nedodržení syntaxe, nelze ve spouštění démona pokračovat.

Nyní tedy umíte spolehlivě editovat konfigurační soubory a testovat, zda jste se při této činnosti nespletli, a navíc efektivně ovládat činnost démona. Dovolím si říci, že editování httpd.conf je zdlouhavá a nezáživná práce, může se ale stát koníčkem, pokud víte, co chcete a jak toho chcete dosáhnout. Příště se podíváme na praktické téma používání serverových vsuvek (SSI) a generovaný obsah prostřednictvím skriptového rozhraní CGI.

Byl pro vás článek přínosný?