Dnes budu pokračovat v postupném procházení souboru httpd.conf, který obsahuje prakticky všechny konfigurační direktivy serveru Apache. Stejně jako v předchozím díle, každou jednotlivou položku doprovodím krátkým příkladem a vysvětlením.
Sekce 2 – Main server configuration
Sekce definující chování základního serveru, tj. buď toho jediného, který je definován, a nebo toho, který vyřizuje dotazy jinak nezpracované jednotlivými definovanými virtuálními servery.
Port, na kterém server v režimu standalone naslouchá příchozím dotazům. Na Unix platformách pro porty s čísly nižšími než 1024 budete potřebovat spouštět základní Apache server s oprávněními root uživatele. Tato direktiva je výhodná i v případě, že již máte nějaký server, např. IIS nebo PWS, který obsadí port 80, tudíž můžete nastavit Apache na volný port. Obvykle se pro snadné zapamatování používá port 8080.
Volba uživatele a skupiny, pod kterou proces běží. Tyto direktivy jsou nejdůležitější na Unix serverech, kde lze nastavit pro procesy serveru uživatele a skupinu, kteří mají příslušné oprávnění přístupu jen tam, kam je potřeba.
ServerAdmin admin@server.net |
|
Adresa, která se objeví na serverem generovaných stránkách, např. chybových zprávách. Díky ní se mohou uživatelé dopátrat kontaktu, kam poslat zprávy o tom, že jim něco nefunguje. Je přinejmenším slušné tuto direktivu vyplnit na funkční adresu, aby se uživatelé mohli ozvat.
ServerName www.server.net |
|
Název serveru, v základní části musí být definován vždy, i kdyby se nikdy nepoužil. V sekcích definic virtuálních serverů určuje základní jméno pro každý virtuální server zvlášť.
DocumentRoot I:/WWW DocumentRoot /home/httpd/html |
|
Definice kořenového adresáře serveru, tj. adresáře, který se zobrazí při přístupu na adresu http://www.server.net. Je vhodné umístit tento adresář do „bezpečného“ prostoru serveru, aby z něj nešlo proniknout pouhými vnořenými odkazy mimo tento adresář – např. k souborům s konfigurací a hesly. Při definici virtuálních serverů definuje tato direktiva domovský adresář pro každý server zvlášť. První varianta je pro Win32 platformy, zatímco druhá je příkladem pro Unix platformy.
<Directory /> Options FollowSymLinks AllowOverridenone </Directory> |
|
Deklarace oprávnění a nastavení, která mohou být dále přepsána soubory .htaccess. Vlastní nastavení je uzavřeno do kontejneru <Directory>, ve kterém se určuje, pro jakou oblast serveru toto nastavení platí. Pro pokročilé: pokud je adresa předznamenána vlnovkou ~, bere se následující vyjádření jako úplný regulární výraz.
Pro nastavení adresáře, kde je uložen kořen dokumentů, je obvykle vhodnější v následujícím kroku nastavit poněkud méně restriktivní opatření, které mimo jiné umožní i načítání výchozích dokumentů (tzv. indexů) bez nutnosti vypisovat celou cestu.
<Directory I:/WWW> Options Indexes FollowSymLinks AllowOverridenone Order allow,deny Allow from all Deny from .spammers.net </Directory> |
|
V sekci Options se mohou vyskytovat mezerou oddělené parametry Indexes, Includes, FollowSymLinks, ExecCGI či MultiViews. Existují i speciální zástupci používaní pro zkrácení zápisu s hodnotou All a None, kteří specifikují všechny direktivy nebo žádnou z nich.
Přibyly ještě položky Order, Allow a Deny, pomocí kterých lze konfigurovat přístup. V tomto případě je nastavení pro všechny ze sekce Allow, pokud nejsou vyjmenování v sekci Deny.
DirectoryIndex index.php index.htm index.html index.txt |
|
Seznam souborů, které se implicitně hledají, pokud není zadáno přímo jméno souboru. Obvykle je vhodné ověřit, zda je zaveden modul, který tuto službu provádí, což se provede pomocí následujícího konfiguračního bloku:
<IfModule mod_dir.c> index.php index.htm index.html index.txt </IfModule> |
|
Název souboru, který se hledá v každém procházeném adresáři podél stromu dokumentů, ve kterém lze předefinovat výchozí nastavení (viz direktiva Directory, popř. parametr Options) a nebo nastavit autorizaci přístupu. Pro tuto deklaraci, neboť je rozšířeným (byť nepříliš rozumným) zvykem deklarovat soubory se seznamem uživatelů a přístupů přímo do konkrétního adresáře do souborů .htpasswd a .htgroups, je vhodné ještě omezit jejich zobrazování při dotazu klienta pomocí direktiv:
<Files .htaccess> Order allow,deny Deny from all </Files> <Files .htpasswd> Order allow,deny Deny from all </Files> <Files .htgroups> Order allow,deny Deny from all </Files> |
|
Tyto varianty lze sloučit do jedné s využitím regulárního výrazu a celý zápis změnit na:
<Files ~ „^.ht> Order allow,deny Deny from all </Files> |
|
Určuje, zda server při konstrukci odkazů směřujících na sama sebe použije při nastavení on obsah direktiv ServerName a Port pro tvorbu „kanonického“ jména, nebo se při nastavení off použije jméno serveru a portu, který získá z hlavičky dotazu od klienta. Pro pokročilé: tato direktiva ovlivňuje i hodnoty SERVER_NAME a SERVER_PORT poskytovaná pro CGI aplikace.
Výchozí typ, který se vloží do hlavičky odesílaného dokumentu, pokud není server schopen jinak určit jeho obsah. Různá nastavení se definují obvykle přes modul mod_mime, který je vhodné buď nechat nastavený na základní konfiguraci dodávanou se vzorovým konfiguračním souborem a nebo si přečíst podrobnou dokumentaci on-line.
Direktiva řídí, zda se bude pro každého klienta zjišťovat z IP adresy i jeho jméno. Je to zajímavé pro detekci „odkud požadavky přichází“, ale mírně to zpomalí server, kvůli čekání na odpověď z DNS serveru. Direktiva je nutná, pokud chcete omezovat přístup pomocí Allow a Deny s uvedením názvů domén. V opačném případě musíte používat pouze deklaraci IP adresami.
Umístění souboru, do kterého se zapisují chybová hlášení. Při deklaraci virtuálních souborů je vhodné pro každý virtuální server vytvořit speciální log, aby se dalo přehledně zjistit, kde je problém. Je nutné věnovat pozornost i tomu, že logy narůstají a tak je vhodné je čas od času promazat. Obzvláště uživatelé na Unix platformě by si měli projít a upravit nastavení aplikace logrotate.
Úroveň aktivit (chyb), které se zaznamenávají do logu. Možné hodnoty jsou debug, info, notice, warn, error, crit, alert a emerg.
LogFormat „%h %l %u %t „%r“ %>s %b „%{Referer}i“ „%{User-Agent}i““ combined LogFormat „%h %l %u %t „%r“ %>s %b“ common LogFormat „%{Referer}i -> %U“ referer LogFormat „%{User-agent}i“ agent LogFormat „%t %a %h %l %>s %u“ user CustomLog logs/access.log user |
|
Definice formátu, ve kterém je ukládán protokol o aktivitě serveru, přístupech ke stránkám apod. Poslední deklarace vybírá soubor, do něhož se protokol ukládá a který formát se použije. Význam jednotlivých direktiv je vhodné prostudovat v dokumentaci k Apache. Stejně jako u chybových záznamů, i zde je nutno hlídat celkovou velikost souborů a vhodným způsobem je průběžně mazat. U systémů na bázi Unix lze opět s výhodou použít proces logrotate, který umí pravidelně zálohovat log soubory, udržovat zpětně nastavený počet záloh a „přebytečné“ záznamy nakonec i zlikvidovat. Podle zatížení serveru je vhodné rotovat záznamy týdně (při nižším zatížení) nebo dokonce denně (při vyšším zatížení).
Určuje, zda se do výpisů generovaných serverem doplňuje informace o verzi serveru, virtuálním hostu. Není špatné pro účely ladění, ale jinak může prozradit příliš informací o verzi software a popř. ulehčit cestu případnému útočníkovi, který zná slabiny konkrétní verze.
Alias /adresar/ /jiné/umisteni/adresare/ |
|
Direktiva Alias se s výhodou používá pro namapování adresářů mimo strom dokumentů do adresního prostoru WWW serveru. Obvykle se tímto způsobem řeší mapování scriptů do /cgi-bin/ adresáře, případně jiných podobných adresářů, jako jsou například ikonky doplňované serverem při výpisu obsahu adresářů. Je důležité poznamenat, že pokud se v prvním parametru použije i koncové lomítko, pak ho musí obsahovat i dotaz, aby se provedlo aliasování. U adresáře pro cgi-bin je nutné ještě povolit spouštění CGI aplikací, zatímco u ikon je ještě nutné nadefinovat, která ikona patří ke kterému souboru
Alias /icons/ |
D:/APACHE/ICONS/ |
|
IndexOptions |
FancyIndexing |
|
AddIconByEncoding |
(CMP,/icons/compressed.gif) |
x-compress x-gzip |
AddIconByType |
(TXT,/icons/text.gif) |
text/* |
AddIconByType |
(SND,/icons/sound2.gif) |
audio/* |
AddIcon |
/icons/binary.gif |
.bin .exe |
AddIcon |
/icons/compressed.gif |
.Z .z .tgz .gz .zip |
AddIcon |
/icons/text.gif |
.txt |
|
|
|
DefaultIcon |
/icons/unknown.gif |
|
Alias /cgi-bin/ |
I:/CGI-BIN/ |
<Directory „I:/CGI-BIN“> AllowOverrideNone Options ExecCGI </Directory> |
|
Direcory – Location – Files – Alias! Nějaký rozdíl?
Určitě dříve či později vás napadne otázka, čím se tyhle direktivy liší. Stručně a jednoduše by se dalo říct, že zatímco Directory, Location a Files nastavují oprávnění přístupu k různým částem serveru, tak Alias nahrazuje část URL (viz první parametr) cesty v rámci adresáře dokumentů serveru a mění ji na cestu jinou (viz druhý parametr).
Rozdíl mezi Directory a Location je pouze ten, že Directory ohraničuje sekci, která se týká fyzicky adresářů na serveru, zatímco Location ohraničuje sekci, jenž se řídí podle URL cesty. Direktiva Files ohraničuje sekci, která se vztahuje na uvedený soubor. Všechny tři direktivy navíc umožňují vyjádřit svůj „objekt zájmu“ pomocí regulárních výrazů, což jim dává značnou flexibilitu.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
já
Srp 28, 2010 v 18:21co třeba psát ukázky kódu černým písmem na černém pozadí, to by bylo fajn :P
Miroslav Kucera
Srp 28, 2010 v 23:14Omlouvam se, ale toto je stary clanek, ktery z nejakeho duvodu nezvladl konverzi. Ono to bylo tezke, z te doby bylo spousta clanku, ktere pro vypisy pouzivaly i vicenasobne tabulky, proboha :-))