BI-AWD Administrace Webového a Databázového serveru Konfigurace webového serveru Apache httpd Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti 1
Obsah Struktura konfiguračních souborů Syntaxe Webspace Filesystem Konfigurační minimum Další možnosti konfigurace Konfigurace virtual hosts 2
Struktura konfiguračních souborů 3
Syntaxe Jedna direktiva na řádce Při rozdělení direktivy na více řádků poslední znak \ Direktivy case insensitive, jejich parametry (např. cesty) mohou být case sensitive Komentář řádek začínající znakem # Komentáře by neměly být spolu s direktivami Prázdné řádky a bílé znaky před direktivami ignorovány 4
Webspace Filesystem 5
Platnost direktiv (scope) Direktivy mimo kontejner platí pro celý server Platnost direktivy lze omezit vložením do sekcí (kontejnerů), které omezí jejich platnost na Část souborového systému (cesty): <Directory> <DirectoryMatch> <Files> <FilesMatch> Zdroje (URL): <Location> <LocationMatch> <Proxy> Website (pokud je server s podporou virtual hostingu): <VirtualHost> Některé direktivy nemají smysl v některých sekcí (např. nastavení obsluhy požadavků, vytváření vláken/procesů) Je nutné dodržovat kontext direktiv (podle dokumentace) 6
Soubor.htaccess Umístění v adresářích exportovaných na web Konfigurace platí pro daný adresář a jeho podadresáře Stejné direktivy použitelné v kontejneru (např. <Directory>) Vyhodnocování při každém požadavku do adresáře Nastavení použití.htaccess souborů direktiva AccessFileName (kontext: celý server, vhost) Default:.htaccess direktiva AllowOverride (kontext: <Directory> apod.) None, All, Typ_direktivy... Soubory se načítají postupně od / (pokud to není zakázáno) 7
Kontejnery podmínek Omezují platnost direktiv Vyhodnocují se při re/startu <IfDefine název>... </IfDefine> Při definici názvu pomocí přepínače -D název Povoluje / zakazuje vlastnosti serveru <IfModule jméno_modulu>... </IfModule> Při načtení modulu do serveru <IfVersion [<>=]x.y.z>... </IfVersion> Podle verze serveru 8
Kontejnery Directory, DirectoryMatch 1.Všechny kontejnery <Directory vzor> v pořadí od nejkratší shody po nejdelší Např. pro adresář /home/*/public_html 1. / 2. /home 3. /home/user 4. /home/user/public_html 2.Soubory.htaccess 3.Všechny kontejnery <Directory ~ ERE> a <DirectoryMatch ERE> v pořadí podle uvedení v konfiguraci Kontejner <Directory /> je povolen po všechny Dostupný je tudíž celý filesystem. Obvykle je nutno přístup do / zakázat! 9
Kontejnery Files, FilesMatch, Location 1.Po zpracování kontejnerů <Directory...> 2.Všechny kontejnery <Files...> v pořadí podle uvedení v konfiguraci <Files vzor> <Files ~ ERE> <FilesMatch ERE> Může být součástí kontejneru <Directory> 3.Aplikuje v případně shody vzoru (ERE) s URL <Location vzor> <Location ~ ERE> <LocationMatch ERE> 10
Vzory, výrazy,... Vzory wildcards (shellové)?, *, [] Znak / se nenahrazuje, musí bý explicitně uveden Výrazy extended regular expressions.,?, *, +,, ^, $,... Cesty obsahující znaky // mohou, ale nemusejí být shodné s / /adr1//adr2 /adr1/adr2 //adr!~ ^/adr 11
Kompilace dynamického (.so) modulu I :: LAB 1. Zkonfigurujte kompilaci tak, aby se modul mod_info kompiloval jako dynamicky načítaný modul (.so) Nápověda: --enable...=shared 2. Otestujte existenci statického modulu 3. Nastavte načítání modulu při definici INFO Nápověda: Pomocí kontejneru IfDefine a -D INFO 4. Nastavte konfiguraci modulu pouze při jeho načtení Nápověda: Pomocí kontejneru IfModule 12
Kompilace dynamického (.so) modulu II :: LAB 5. Změňte adresu výstupu modulu na /info Nápověda: Pomocí kontejneru Location 6. Otestujte načítání dynamického modulu 7. Otestujte konfiguraci serveru 8. Restartujte server 9. Ověřte funkčnost v prohlížeči 10. Povolte přístup k modulu pouze z konkrétní IP adresy 11. Ověřte funkčnost v prohlížeči Nápověda: wget --bind-address=ip 13
Možnosti Options Povoluje / zakazuje možnosti v určených adresářích Syntaxe: Options [+ -]option... + přidává, odebírá Bez znaménka nastavuje pouze uvedené vlastnosti Vlastnosti se/bez znaménka se nesmí kombinovat Default: Options All Kontext: server, virtual host, directory,.htaccess 14
Konfigurační minimum ServerRoot (core) Kořenový adresář s instalací serveru (--prefix) ServerRoot "/usr/lib64/apache2" Listen (mpm) IP adresa/jméno, TCP port serveru (je možno použít vícekrát) Listen 80 ServerName (core) Jméno serveru pro odpovědi (např. při přesměrování) ServerName www.example.com User / Group (mpm) Indetita uživatele / skupiny pro běh serveru v případě, že je server spuštěn rootem User apache Group apache DocumentRoot (core) mapování kořene webu na filesystém DocumentRoot "/var/www/localhost/htdocs" 15
Další možnosti konfigurace I Načítání modulů (mod_so) LoadModule dir_module modules/mod_dir.so Výchozí stránka (mod_dir) DirectoryIndex index.html index.htm Automaticky generovaný index (mod_autoindex) Options +Indexes IndexOptions FoldersFirst IgnoreCase IndexIgnore README.htaccess *.bak *~ AddIcon (IMG,/icons/image.xbm).gif.jpg.xbm 16
Další možnosti konfigurace II Nastavení znakové sady a jazyků (core) AddDefaultCharset utf-8 Logování (core) ErrorLog /var/log/apache2/error_log LogLevel error HostnameLookups off Logování vlastní (mod_log_config) LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog logs/access_log common 17
Další možnosti konfigurace III Autorizace (mod_authz_host) Order Deny, Allow Určuje pořadí zákazů a povolení Allow From... Deny From... Určuje, který klient je resp. není autorizován IP adresa - 147.32.80.90 část IP adresy - 147.32.80 síť (CIDR) - 10.0.0.0/8 doménové jméno - mypc.example.org část doménového jména - example.org.net všichni - vyhrazeno slovo all 18
Základní konfigurace I :: LAB 1. Upravte konfiguraci serveru tak, aby poslouchal pouze na rozhraních v sítích 127.0.0.0/8, 10.0.0.0/8 a TCP portech 80 a 8080 Nápověda: pro ověření použijte příkaz netstat 2. Adresář /var/www/main bude přístupný jako kořen webu 3. V adresáři nastavte AddDefaultCharset na hodnotu UTF-8 4. Pokud se stránka zobrazí špatně, použijte dokumentaci k direktivě a telnet pro diagnostikování a odstranění problému 19
Základní konfigurace II :: LAB 5. Přístup do adresáře /var/www/main/private zakažte v konfiguraci webserveru 6. V adresáři /var/www/main/users povolte vypsání obsahu adresáře, pokud není k dispozici index 7. V případě chyby 404 Not Found zkontrolujte, zda není potřeba načíst nějaký rozšiřující modul 8. Pro všechny podadresáře tuto vlastnost zakažte! 9. Ve všech podadresářích /var/www/main/users/ povolte použítí.htaccess souborů a přenastavení Options a Limit 20
Základní konfigurace III :: LAB 10. Povolte výpis obsahu adresáře /var/www/main/users/franta/data pomocí souboru.htaccess 11. Zakažte zobrazení všech souborů s příponou bak nebo txt 12. Pokuste se zobrazit textový soubor v http://localhost/users/franta/data/tohle_byste_videt_meli.txt 13. Nechte si vypsat obsah adresáře http://localhost/users/franta/data/ 14. Načtěte do serveru modul alias LoadModule alias_module modules/mod_alias.so 21
Základní konfigurace IV :: LAB 15. Namapujte do struktury webu z předchozího příkladu na URL /vhosts adresář /var/www/vhosts 16. Povolte k němu přístup 17. Povolte jeho výpis, pokud není k dispozici index 18. Zjistěte, kam server loguje chybová hlášení 19. Požádejte pomocí prohlížeče server o neexistující zdroj http://localhost/neexistuje 20. Zvyšte úroveň logování alespoň o 2 úrovně 21. Server restartujte a prostudujte obsah logu 22
Konfigurace virtual hosts Kontejner <VirtualHost> IP-based virtual hosting ServerName ServerAlias DocumentRoot pokud nebude nalezen odpovídající ip-vh, použije se _default_, pokud není ani ten, použije se nastavení hlavního serveru Name-based virtual hosting nutno dopředu definovat IP adresy použité pro name-based vh NameVirtualHost IP[:port] je nutné specifikovat jméno serveru jinak shodné s ip-vh 23
Výběr virtuálního hostitele 24
Nastavení síťových rozhraní :: LAB 1. Vytvořte síťové rozhraní eth0:1 eth0:3 s IP adresami 10.0.-X-.1 až 10.0.-X-.3 Značka -X- v IP adrese musí odpovídat 4. oktetu IP adresy rozhraní eth0 na konkrétním PC. ip=`ifconfig eth0 grep inet \ cut -d: -f2 cut -d' ' -f1 cut -d. -f4` for n in {1..3} do ifconfig eth0:$n 10.0.$ip.$n netmask 255.255.0.0 done 25
Konfigurace lokálního překladu IP/DN :: LAB 2. Zkontrolujte, zda soubor /etc/hosts obsahuje následujcící záznamy, značka -X- v IP adrese musí odpovídat 3. oktetu IP adresy rozhraní eth0:n na konkrétním PC 10.0.-X-.1 10.0.-X-.1 10.0.-X-.2 10.0.-X-.2 10.0.-X-.2 10.0.-X-.3 www.mycorp.em www.aliascorp.em www.othercorp1.em www.othercorp2.em www.othercorp3.em www.nocorp.em vi /etc/hosts 26
IP-based virtual hosting I :: LAB 3. Pro konfiguraci IP-based virtual hostingu si vytvořte samostatný soubor, pomocí direktivy Include jej načtěte do hlavního konfiguračního souboru 4. IP adresu 10.0.-X-.1 vyhraďte pro server se jménem www.mycorp.em a aliasem www.aliascorp.em 5. Kořen tohoto webu nastavte na /var/www/vhosts/mycorp 6. Chybová hlášení z tohoto virtuálního hostitele směrujte do /var/log/apache2/mycorp_error_log 27
IP-based virtual hosting II :: LAB 7. Vyzkoušejte požadavek na http://www.mycorp.em http://www.mycorp.em/neexistuje http://www.nocorp.em http://www.nocorp.em/neexistuje 8. Pokuste se vysvětlit chování serveru 9. Zjistěte, kam byly zalogovány požadavky na neexistující zdroje 10. Definujte výchozího IP-based virtuálního hostitele 11. Nastavte pro něj DocumentRoot na /var/www/vhosts/default 28
IP-based virtual hosting III :: LAB 12. Vyzkoušejte požadavek na http://www.mycorp.em http://www.mycorp.em/neexistuje http://www.nocorp.em http://www.nocorp.em/neexistuje 13. Pokuste se vysvětlit chování serveru 14. Zjistěte, kam byly zalogovány požadavky na neexistující zdroje 29
Name-based virtual hosting I :: LAB 15. Pro tuto část se ujistěte, že nenačítáte konfiguraci pro IP-based virtual hosting (neměla by žádný vliv) 16. Pro konfiguraci name-based virtual hostingu si vytvořte samostatný soubor, pomocí direktivy Include ho načtěte do hlavního konfiguračního souboru 17. Vyhraďte všechny IP adresy, na kterých server poslouchá, pro name-based virtual hosting 18. Nastavte výchozího virtuálního hostitele: Jméno serveru je www.othercorp1.em DocumentRoot je /var/www/vhosts/othercorp1 30
Name-based virtual hosting II :: LAB 19.Nastavte dalšího virtuálního hostitele na: Jméno serveru je www.othercorp2.em DocumentRoot je /var/www/vhosts/othercorp2 20. Vyzkoušejte požadavky na http://www.othercorp1.em http://www.othercorp2.em http://www.othercorp3.em 31
Mixed virtual hosting I :: LAB 21.Pro tuto část se ujistěte, že načítáte konfiguraci pro IP-based virtual hosting 22.Pro konfiguraci name-based virtual hostingu si vytvořte samostatný soubor, pomocí direktivy Include ho načtěte do hlavního konfiguračního souboru 23.Vyhraďte IP adresu 10.0.-X-.2 pro namebased virtual hosting 24.Definujte virtuální hostitele: Jméno serveru je www.othercorp1.em DocumentRoot je /var/www/vhosts/othercorp1 Jméno serveru je www.othercorp2.em DocumentRoot je /var/www/vhosts/othercorp2 32
Mixed virtual hosting II :: LAB 21.Vyzkoušejte požadavky na http://www.mycorp.em http://www.aliascorp.em http://www.othercorp1.em http://www.othercorp2.em http://www.othercorp2.em http://www.othercorp3.em http://www.nocorp.em 33