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):
Zdroje (URL): Website (pokud je server s podporou virtual hostingu):
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ř. )
●
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: 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
●
...
●
●
Při definici názvu pomocí přepínače -D název
●
Povoluje / zakazuje vlastnosti serveru
... ●
●
Při načtení modulu do serveru
=]x.y.z> ... ●
Podle verze serveru
8
Kontejnery
Directory, DirectoryMatch
1.Všechny kontejnery 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 a v pořadí podle uvedení v konfiguraci ●
Kontejner 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ů 2.Všechny kontejnery v pořadí podle uvedení v konfiguraci ●
●
●
Může být součástí kontejneru 3.Aplikuje v případně shody vzoru (ERE) s URL ●
●
●
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) ●
●
Výchozí stránka (mod_dir) ●
●
LoadModule dir_module modules/mod_dir.so
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
●
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