Jak přežít Apache – Main server configuration

3. července 2002

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 80

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.

User apache
Group apache

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>
AccessFileName .htaccess

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>
UseCanonicalName on

Určuje, zda server při konstrukci odkazů směřujících na sama sebe použije při nastavení on obsah direktiv ServerNamePort 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_NAMESERVER_PORT poskytovaná pro CGI aplikace.

DefaultType text/plain

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.

HostNameLookups off

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.

ErrorLog logs/error.log

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.

LogLevel warn

Ú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í).

ServerSignature Off

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, LocationFiles 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 DirectoryLocation 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.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

2 komentářů

  1. Srp 28, 2010 v 18:21

    co třeba psát ukázky kódu černým písmem na černém pozadí, to by bylo fajn :P

    Odpovědět
  2. Miroslav Kucera

    Srp 28, 2010 v 23:14

    Omlouvam 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 :-))

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *