|
Základní nastavení web serveru Apache je strašně jednoduché. A to i v případě, kdy je provozován pod Windows. To ale člověk, který Apache nikdy předtím nekonfiguroval, zjistí až po přečtení tisícistránkového manuálu, který je (aby to nebylo tak jednoduché) napsán naprosto nesrozumitelně.
Základní kameny
Aby Apache mohl vůbec fungovat, musí vědět na kterém portu má očekávat příchozí požadavky (standardně 80) a kde má na disku uložen obsah webových stránek.
Listen 80
DocumentRoot "C:/Apache2/htdocs"
Obě tyto informace uloží instalátor už při instalaci do konfiguračního souboru. Konfigurační soubor se jmenuje httpd.conf a pro případné pozdější změny je dobré vědět, pod jakými položkami se v něm výše uvedené informace nacházejí. Vlastní konfigurační soubor se nachází na disku tam, kam byl Apache nainstalován, konkrétně pak v podsložce conf. Všimněte si také, že při uvádění cest ke složkám a souborům, se nepoužívají obrácená lomítka (ála Microsoft), alebrž normální lomítka (ála Unix). Konfigurační soubor se skládá ze sekcí, kdy každá sekce má začátek a konec. Hlavní sekce začíná na začátku souboru a končí na jeho konci, podsekce jsou pak ohraničeny klíčovým slovem, které je v ostrých závorkách, podobně jako HTML tagy:
<VirtualHost *:8080>
DefaultLanguage sk
AddDefaultCharset WINDOWS-1250
DocumentRoot "C:/webstranky/nestandardniport"
ErrorLog logs/nonstd/error.log
CustomLog logs/nonstd/access.log common
CustomLog logs/nonstd/referer.log referer
CustomLog logs/nonstd/agent.log agent
</VirtualHost>
<Directory "C:/Apache2/htdocs/listing">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Tím však možnosti konfigurovat Apache nekončí. Kromě tohoto hlavního konfiguračního souboru lze do webových stránek, doslova do každé jednotlivé složky, umisťovat další konfigurační soubory .htaccess (jméno žádné, jen přípona) a ovlivňovat tak chování každé jednotlivé složky. Tedy například stránky dostupné přes http://localhost/rodina/ mohou být přístupné jen při zadání platného přihlašovacího jména a hesla a vlastní stránky pak mohou mít češtinu kódovanou jako Windows a při zobrazení podsložky, ve které chybí index se může vypsat listing přítomných souborů. Zatím co stránky dostupné přes http://localhost/maminka/ mohou být volně přístupné, kódované v UTF-8 a podsložky bez indexu zobrazí chybu "Forbidden". Zde je zapotřebí vědět, že používání konfiguračních souborů .htaccess je nutné nejprve povolit, respektive nezakázat v té které složce (klíčovým slovem AllowOverride). Z bezpečnostních důvodů je ve výchozím stavu AllowOverride None (čili není povoleno měnit výchozí parametry chování Apache pomocí konfiguračního souboru .htaccess v žádné složce).
Poznámka pro šťouraly: aby výše uvedený příklad fungoval, musí se do httpd.conf doplnit řádek Listen 8080 a na disku musí být odpovídající adresářová struktura.
Národní prostředí
Podporu češtiny na webových stránkách lze nakonfigurovat přesně podle potřeby. Ponejprv je žádoucí Apachovi v httpd.conf sdělit, že má umět i češtinu:
AddLanguage cs .cz .cs
LanguagePriority cs en ca da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
AddCharset WINDOWS-1250 .cp-1250 .win-1250
AddCharset UTF-8 .utf8
Dále je vhodné najít řádek podobný následujícímu a příslušně upravit cestu ke složce se soubory s chybovými hlášeními:
Alias /error/ "C:/Apache2/error/"
Jelikož jsou tento a následující řádky neaktivní (začínají znakem #, což z nich dělá pouhý komentář), je třeba odstranit všechny # na začátcích řádků, počínaje řádkem shora uvedeným až po tento řádek:
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
Apache nás neomezuje ve výběru kódování, lze dokonce i KOI-8 (pamětníci RVHP nostalgicky zavzpomínají). Pro nastavení výchozího kódování národních znaků se do konfiguračního souboru doplní řádek:
AddDefaultCharset WINDOWS-1250
Pokud se výše uvedený řádek doplní do souboru httpd.conf do hlavní sekce, ovlivní se tím všechny webové stránky. Pokud se umístí do sekce <VirtualHost>, ovlivní se tím všechny webové stránky jednoho virtuálního stroje a pokud se umístí do sekce <Directory>, ovlivní se tím jedna konkrétní složka a všechny její podsložky. Pokud se výše uvedený řádek doplní do souboru .htaccess bude tím ovlivněna ta složka, ve které se soubor nachází a samozřejmě i všechny její podsložky.
A jakže se takto nastavené výchozí kódování projeví? Vždyť přece existuje HTML tag, např.:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
který přímo říká, jak je ten který html dokument kódován! Ano, to sice existuje, ale Microsoft Internet Explorer ho ignoruje a dává přednost tomu, co mu připutuje v hlavičce http protokolu (viz zvýrazněný řádek):
HTTP/1.0 200 OK
Server: Apache/2.0.49 (Unix)
X-Powered-By: PHP/4.3.11
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=WINDOWS-1250
Jiný příklad:
HTTP/1.0 200 OK
Server: Apache/2.0.55 (Win32) PHP/4.4.2
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html; charset=ISO-8859-2
Content-Language: sk
Přístup přes heslo
Opět je to vcelku triviální záležitost, když se ví, které náležitosti se mají splnit. V první řadě musí existovat soubor, ve kterém je napsáno kdo a s jakým heslem má do dané složky (a jejích podsložek) přístup. Dále musí být uvedeno, kde se tento soubor nachází a v neposlední řadě musí mít Apache povoleno tyto informace použít. Ale začněme od konce: definice jména a hesla. Jméno je jednoduché, prostě se napíše tak jak má být používáno, s heslem je to horší. Apache nebere heslo napsané tak jak je (čili plain text), ale chce ho v zašifrované podobě. A aby to nebylo tak jednoduché, tak způsobů, jak heslo zašifrovat, existuje hned několik, ale Apache používá jen jeden a nikdo neví jaký (a heslo zašifrované jiným způsobem pak pochopitelně nefunguje). Já jsem zjistil, že Apache pod Windows používá pro zašifrování hesla techniku MD5. Heslo si tedy lze vyrobit pomocí programu htpasswd.exe z příkazové řádky:
htpasswd.exe -bc C:\Apache2\hesla.txt Administrator strasnesloziteheslo
Ve složce, která má být bez znalosti jména a hesla nepřístupná, pak se vytvoří náš starý známý konfigurační soubor .htaccess tohoto obsahu:
Deny from all
AuthType Basic
AuthUserFile C:/Apache2/hesla.txt
AuthName "Napiš jméno a heslo, žabaři!"
Require valid-user
Satisfy any
AuthUserFile musí ukazovat na soubor se jmény a hesly (co řádek, to jméno:zašifrované heslo), přičemž je žádoucí, aby se tento soubor nenacházel ve struktuře webových stránek. Případně lze též doplnit parametr pro kódování národních znaků AddDefaultCharset. A pochopitelně, že text v AuthName musí být napsán ve správném kódování, což je: v cizojazyčných prohlížečích bez diakritiky, v MSIE v kódování Windows-1250 (prohlížeče totiž jaxi ignorují charset, který jim Apache snaživě pošle).
No a nakonec musí být v dané složce povoleno použití konfiguračního souboru .htaccess, což se zařídí v httpd.conf v sekci <Directory> nebo <VirtualHost>, podle toho, co chceme z(ne)přístupnit:
<Directory "C:/Apache2/htdocs/soukrome">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Klíčový je parametr AllowOverride All, k čemu jsou ostatní parametry, resp. význam všech parametrů je popsán v Apache HTTP Server Documentation. |