Crmgo Blog

Direktivy http.conf

Direktivy http.conf

ServerRoot Cesta k spustitelným souborům HTTP serveru Apache. Listen Nastavuje port a IP adresu, kterou Apache „poslouchá". Ve výchozím nastavení se všechny prohlížeče pokoušejí otevřít HTTP spojení se serverem Apache přes port 80. Pokud nastavíte jiný port, například 9031, pak pro otevření stránky v…

Direktivy http.conf

ServerRoot Cesta k spustitelným souborům HTTP serveru Apache. Listen Nastavuje port a IP adresu, kterou Apache „poslouchá“. Ve výchozím nastavení se všechny prohlížeče snaží otevřít HTTP spojení se serverem Apache přes port 80. Pokud nastavíte jiný port, například 9031, musíte pro otevření stránky v prohlížeči za adresu stránky navíc zadat port oddělený dvojtečkou, například: http://localhost:9031. V této direktivě lze také zadat jednu IP adresu, kterou bude Apache zpracovávat (například Listen 192.168.0.10:80), pokud má počítač k dispozici dvě a více IP adres. DocumentRoot Tato direktiva v souboru httpd.conf určuje adresář, ve kterém se nacházejí soubory HTML a další soubory jednoho webu. V případě potřeby podpory dvou a více webů jedním serverem Apache by se měla použít direktiva-kontejner <VirtualHost></VirtualHost>. Při použití virtuálních hostů nesmíte zapomenout na nastavení práv přístupu k adresáři uvedenému v řádku „DocumentRoot“, protože stránky tohoto adresáře budou uživatelům zobrazeny, pokud zadají doménu, která není uvedena ve VirtualHost. <Directory>
...
</Directory>

Direktivy uvedené uvnitř kontejneru Directory budou ovlivňovat všechny soubory a složky uvedeného adresáře. Cesta k adresáři se uvádí ihned za slovem Directory, například: blok kódu
<Directory "C:/apache2.2.19/htdocs"> ... direktivy ... </Directory>

nastavuje chování uvedeného adresáře. Místo názvu adresáře lze použít regulární výrazy. Options Direktiva Options určuje, které funkce serveru jsou v konkrétním adresáři dostupné.

  • All – povoleny jsou všechny možnosti kromě MultiViews (výchozí nastavení).
  • None – zakázány jsou všechny možnosti.
  • ExecCGI – povolen je spouštění skriptů CGI.
  • FollowSymLinks – server bude následovat symbolické odkazy v tomto adresáři.
  • Includes – povoleny jsou SSI (Server-Side Includes).
  • IncludesNOEXEC – SSI je povoleno, ale příkazy #exec a #include ve skriptech CGI jsou blokovány.
  • Indexes – pokud požadovaná URL odpovídá adresáři a v tomto adresáři není nic odpovídajícího DirectoryIndex (například Index.htm), server vrátí seznam všech souborů a adresářů.
  • MultiViews – jsou povoleny obsahově negociovatelné MultiViews.
  • SymLinksIfOwnerMatch – server bude následovat pouze ty symbolické odkazy, u kterých má cílový soubor nebo adresář stejného vlastníka (UID) jako samotný odkaz.
Pokud je pro adresář použito několik možností direktivy Options a následně jsou pro jeho podsložku použity jiné možnosti, možnosti nadřazeného adresáře se na podsložku nevztahují.
Příklad č. 1 – dědičnost možností:
<Directory "c:/www"> Options Indexes FollowSymLinks </Directory>

<Directory "c:/www/otherdir">
Options Includes
</Directory>

V tomto příkladu je adresáři c:/www a všem jeho podsložkám kromě c:/www/otherdir přiřazeny možnosti „Indexes“ a „FollowSymLinks“. Podsložka c:/www/otherdir a všechny její podsložky mají však přiřazenu pouze možnost „Includes“.

Pomocí symbolů „+" a „-" lze přidat nebo odebrat libovolnou volbu pro podadresář.
Příklad č. 2 – dědičnost voleb:
<Directory "c:/www"> Options Indexes FollowSymLinks </Directory>

<Directory "c:/www/otherdir">
Options +Includes -Indexes
</Directory>

V tomto případě bude adresář c:/www/otherdir disponovat volbami „FollowSymLinks" (přidáno pro nadřazený adresář) a „Includes" – přidáno pomocí znaménka „+". Volba „Indexes" byla z adresáře c:/www/otherdir odstraněna pomocí znaménka „-". AllowOverrideVolba AllowOverride určuje serveru Apache, které direktivy v souboru .htaccess jsou povoleny (název souboru „.htaccess" nebo jiný je určen direktivou AccessFileName).

  • All – jsou povoleny všechny direktivy (výchozí nastavení).
  • None – soubor .htaccess se nevyhodnocuje.
  • AuthConfig – povoluje použití direktiv pro řízení přístupu (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require atd.).
  • FileInfo – povoluje použití direktiv pro správu typů dokumentů (AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority atd.).
  • Indexes – povoluje použití direktiv pro správu indexování adresářů (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName atd.).
  • Limit – povoluje použití základních direktiv pro řízení přístupu (allow, deny a order).
  • Options[=Option,...] – povoluje použití direktiv pro řízení specifických vlastností adresáře (Options a XBitHack).
Z důvodu výkonu a maximální bezpečnosti hlavního adresáře HTTP serveru Apache „/", uvedeného v kontejneru <Directory />, by měla být hodnota AllowOverride nastavena na None: AllowOverride None.

Order Direktiva Order řídí výchozí stav přístupu a pořadí, ve kterém je přístup povolen nebo zamítnut. Order může nabývat 3 hodnot:

  • Allow,Deny – výchozí stav je přístup zamítnut, s výjimkou hostitelů uvedených v řádku po Allow from.
  • Deny,Allow – výchozí stav je přístup povolen, s výjimkou hostitelů uvedených v řádku po Deny from.
  • Mutual-failure – přístup je povolen pouze pro ty hostitele, kteří jsou uvedeni v Allow a nejsou uvedeni v Deny.
Nejběžněji se používají hodnoty Allow, Deny a Deny, Allow. Výchozí hodnota je určena posledním slovem (Allow nebo Deny). Mezi slovy Allow a Deny v direktivě Order musí být pouze čárka, bez mezer.
V příkladech č. 1–3 jsou pro stručnost vynechány otevírací a uzavírací kontejnery <Directory ...></Directory>, které jsou při konfiguraci Apache povinné.
Příklad č. 1: První řádek „Order Deny,Allow“ určuje pořadí čtení oprávnění: nejdříve se čtou všechna omezující oprávnění (Deny from...), a teprve poté povolující oprávnění (Allow from). Ve výchozím nastavení je povoleno (Allow). Druhý řádek „Deny from all“ zakazuje přístup všem hostitelům ke všem doménám. Třetí řádek „Allow from apache.org“ povoluje přístup k doméně apache.org.
Příklad č. 1 nastavení přístupových práv
Order Deny,Allow Deny from all Allow from apache.org
Následující příklad č. 2 povoluje přístup pouze k doméně apache.org, s výjimkou poddomény foo.apache.org (Deny from foo.apache.org). Všechny ostatní domény budou nedostupné.
Příklad č. 2 nastavení přístupových práv
Order Allow,Deny Allow from apache.org Deny from foo.apache.org
Příklad č. 3 se od příkladu č. 2 liší pouze hodnotou direktivy Order: „Deny,Allow“ místo „Allow,Deny“. Logika přidělování přístupových práv Apache se však na první pohled změní velmi neočekávaně. Přístup bude otevřen absolutně ke všem doménám, dokonce i k poddoméně foo.apache.org, která je explicitně zakázána řádkem „Deny from foo.apache.org“. K tomu dochází proto, že pořadí řádků „Allow from ...“ a „Deny from ...“ nemá význam. Pořadí aplikování pravidel je určeno direktivou Order, na základě čehož Apache nejprve zakáže přístup k foo.apache.org a poté toto pravidlo přepíše na základě direktivy „Allow from apache.org“.
Příklad č. 3 nastavení přístupových práv
Order Deny,Allow Allow from apache.org Deny from foo.apache.org
Příklad č. 4 zakazuje přístup do adresáře C:/www ve výchozím nastavení, a to i bez použití řádku „Deny from ...“.
Příklad č. 4 nastavení přístupových práv
<Directory "C:/www"> Order Allow,Deny </Directory>

Doplňující informace o direktivách Allow, Deny a Order lze získat z oficiální dokumentace Apache 2.2 (anglicky). <VirtualHost>
...
</VirtualHost>

Kontejner <VirtualHost>...</VirtualHost> slouží k tomu, aby jeden server Apache zpracovával různé webové stránky. Všechny direktivy zapsané v kontejneru VirtualHost se vztahují výhradně k jedné webové stránce. Jedna webová stránka (soubor a adresáře) může být dostupná pod jednou nebo více doménami nebo IP adresami.
Speciální jméno _default_ může být definováno, když tento konkrétní virtuální host odpovídá jakékoli IP adrese, která není explicitně uvedena v deklaraci jiného virtuálního hostitele. Pokud deklarace _default_ virtuálního hostitele chybí v konfiguraci serveru a požadavek neodpovídá žádnému z známých virtuálních hostitelů, pak pro odpověď se používá hlavní server, jehož adresář je nastaven v direktivě DocumentRoot.
Uvnitř každého kontejneru VirtualHost lze použít téměř jakoukoli direktivu Apache, což umožňuje nastavit každou webovou stránku velmi podrobně.
Příklad podpory dvou různých webových stránek jedním serverem Apache
<VirtualHost *:80> ServerName first.loc ServerAlias www.first.loc DocumentRoot "c:/www/first.loc/public" ErrorLog "c:/www/first.loc/logs/error.log" </VirtualHost>

<VirtualHost *:80>
ServerName second.loc
ServerAlias www.second.loc
DocumentRoot "c:/www/second.loc/public"
ErrorLog "c:/www/second.loc/public"
</VirtualHost>

Poznámka: příspěvek mohl vzniknout s pomocí AI a lidskou redakcí. Odpovědný: Dmytro Lomaka, Kaltenkirchen.