Apache httpd

Podrobné výpisky ke zkoušce – Administrace webu

1. X/HTML a Struktura dokumentů

Pro správné fungování webového serveru je nutné chápat, co vlastně server posílá. Není to jen text, ale strukturovaný dokument.

HTML (HyperText Markup Language)

XHTML (Extensible HyperText Markup Language)

2. URL/URI/IRI - Adresování zdrojů

Aby server věděl, co má vydat, musíme zdroje jednoznačně identifikovat.

Základní koncepty

Struktura URL

scheme://user:password@host:port/url-path?parametr1=hodnota1#fragment

Rozbor částí:

Kódování znaků v URL (URL Encoding)

Princip: URL může obsahovat jen omezenou sadu ASCII znaků. Vše ostatní (mezery, diakritika, speciální symboly) by mohlo zmást server nebo prohlížeč.

3. Protokol HTTP

HTTP je jazyk, kterým se domlouvá prohlížeč se serverem.

Základní vlastnosti HTTP/1.0

HTTP/1.1 - Klíčová vylepšení

HTTP/2 a HTTPS

4. HTTP Komunikace - Podrobně

Struktura HTTP zprávy

Komunikace probíhá výměnou zpráv, které mají jasně daný formát.

Požadavek (Request) - od klienta

Skládá se z Request-Line (co chci a jak), Hlaviček (metadata o klientovi) a volitelného Těla (data formuláře).
GET /index.html HTTP/1.1    <-- Metoda, URI, Verze
Host: www.example.com       <-- Hlavičky
User-Agent: Mozilla/5.0...

[tělo požadavku - u GET prázdné]

Odpověď (Response) - od serveru

Skládá se ze Status-Line (výsledek), Hlaviček (metadata o obsahu) a Těla (samotná stránka).
HTTP/1.1 200 OK             <-- Verze, Kód, Slovní popis
Content-Type: text/html     <-- Hlavičky
Content-Length: 1234

<html>...</html>            <-- Tělo odpovědi

Stavové kódy - Co znamenají

Kód na začátku odpovědi říká, jak to dopadlo. První číslice je klíčová:

1xx - Informational

Server říká: "Rozumím, moment, pracuji na tom." (např. 100 Continue při nahrávání velkých dat).

2xx - Success (Úspěch)

Vše dopadlo dobře. Nejčastější je 200 OK (tady jsou data, o která sis řekl).

3xx - Redirection (Přesměrování)

Zdroj je jinde. Klient musí udělat další krok (jít na jinou URL).

  • 301 Moved Permanently: Trvalá změna. Prohlížeč si zapamatuje, že už má chodit jen na novou adresu (důležité pro SEO).
  • 302 Found: Dočasná změna. "Teď jdi sem, ale příště se zeptej zase na původní adrese."

4xx - Client Error (Chyba je u tebe)

Klient poslal něco špatně.

  • 400 Bad Request: Server nerozumí dotazu (špatná syntaxe).
  • 401 Unauthorized: Musíš se přihlásit (chybí jméno/heslo).
  • 403 Forbidden: Přihlášen jsi (nebo není třeba), ale nemáš právo to vidět (zákaz v konfiguraci).
  • 404 Not Found: To, co hledáš, tu není.

5xx - Server Error (Chyba je u mě)

Server selhal při zpracování validního dotazu.

  • 500 Internal Server Error: Obecná chyba. Často chyba v konfiguraci (.htaccess) nebo spadlý skript (PHP).

HTTP Metody - Co chceme dělat

5. Virtual Hosting - Virtualizace

Virtuální hosting řeší problém, jak na jednom fyzickém serveru (a jedné instanci Apache) provozovat více různých webů (domén).

IP-based Virtual Hosting (Podle IP)

Historicky starší metoda. Server má více síťových karet nebo více IP adres.

Name-based Virtual Hosting (Podle jména)

Standardní metoda dnes. Využívá vlastnosti HTTP/1.1.

Proces výběru virtuálního hostitele

Když přijde požadavek, Apache postupuje takto:

  1. Match IP:Port: Vyfiltruje všechny VH, které naslouchají na dané IP a portu.
  2. Match ServerName: U těchto kandidátů porovná hlavičku Host s direktivami ServerName a ServerAlias.
  3. Fallback: Pokud žádný VH přesně neodpovídá jménu, Apache použije první definovaný VH v konfiguraci (tzv. defaultní server).

Pozor na pořadí: Pořadí načítání konfiguračních souborů (např. podle abecedy v sites-enabled) určuje, kdo bude ten "první/defaultní".

6. Apache httpd - Architektura

MPM (Multi-Processing Modules)

MPM určuje, jak Apache technicky obsluhuje souběžné požadavky. Je to "motor" serveru. Můžete mít zaveden vždy jen jeden MPM.

Životní cyklus požadavku

Když Apache zpracovává dotaz, prochází těmito fázemi:

  1. Překlad URI (Name Translation): Zjištění, zda URL odpovídá souboru na disku (DocumentRoot) nebo něčemu jinému (Alias).
  2. Autentizace a Autorizace: Kdo to je a má sem přístup?
  3. MIME Type Checking: Co je to za soubor? (např. .html, .jpg).
  4. Response Generation (Handler): Vygenerování obsahu (přečtení souboru nebo spuštění skriptu).
  5. Filtrování: Úprava výstupu (např. komprese GZIP).
  6. Logování: Zápis do access logu.

7. Konfigurace Apache - Struktura a Syntaxe

Kontejnery (Scope direktiv)

Direktivy neplatí vždy globálně. Jejich platnost omezujeme pomocí kontejnerů:

Souborové kontejnery (Filesystem)

Vztahují se k fyzickým cestám na disku serveru.

URL kontejnery (Webspace)

Vztahují se k virtuální cestě v prohlížeči (URL).

Soubory .htaccess

Umožňují konfiguraci "za běhu" přímo v adresářích webu, bez restartu serveru.

8. Kontejnery podmínek

9. Mapování Webspace → Filesystem

Jak server ví, který soubor na disku má poslat, když přijde URL?

10. Řízení přístupu - Access Control

Rozhodování, koho pustíme a koho ne. V Apache 2.4 se změnila syntaxe.

Moderní přístup (Apache 2.4+) - Require

Používá srozumitelnější logiku. Výchozí stav je "zakázáno", musíte explicitně povolit.

Require all granted              # Pustit kohokoliv (veřejný web)
Require all denied               # Nepustit nikoho
Require ip 10.0.0.0/8            # Pustit jen interní síť

Logické bloky:

⚠️ Starý systém (Order, Allow, Deny) z verze 2.2 je sice zpětně kompatibilní, ale neměli byste ho míchat s novým Require, jinak dojde k nepředvídatelnému chování.

11. Autentizace a Autorizace

Dva odlišné pojmy: Autentizace ověřuje identitu (Jsi to ty?), Autorizace ověřuje oprávnění (Máš na to právo?).

HTTP Basic Authentication

Nejběžnější metoda. Prohlížeč vyhodí vyskakovací okno pro jméno a heslo.

Klientské certifikáty (Vzájemná autentizace)

Nejvyšší stupeň bezpečnosti. Nejen server se prokazuje certifikátem, ale i klient (uživatel) musí mít v prohlížeči nainstalovaný osobní certifikát. Pokud ho nemá, server spojení odmítne ještě před načtením stránky.

12. MIME Typy a Metadata

Asociace metainformací se soubory podle přípon.

Konfigurace

AddType image/gif .gif
AddLanguage cs .cs .cz
AddCharset UTF-8 .utf8
AddEncoding gzip .gz

Vícenásobné přípony: dokument.cs.utf8.html
Každá přípona přidává metainformaci (.html → text/html, .utf8 → charset UTF-8).

13. Zpracování požadavku - Handlery a Filtry

Standardně Apache soubor vezme a pošle. Co když s ním chceme něco dělat?

Handlery (Co s tím udělat)

Handler je "akce", která se provede s vyžádaným souborem. Každý soubor má právě jeden handler.

Filtry (Úprava toku dat)

Filtry fungují jako "trubky", kterými data protékají. Můžete jich zapojit více za sebe.

14. Dojednávání obsahu (Content Negotiation)

Výběr nejlepší varianty (jazyk, formát, kvalita) podle preferencí klienta (hlavičky Accept-*).

Multiviews

Automatický výběr podle přípon.

Options +Multiviews

Pokud klient chce /manual a existuje manual.cs.html a manual.en.html, server vybere podle Accept-Language.

Type-map soubory

Soubor .var explicitně definuje varianty a jejich kvalitu (qs).

15. Logování

Bez logů nevíte, co se na serveru děje. Apache má dva hlavní logy.

Error Log (Chybový protokol)

Zde končí všechno, co se nepovedlo. Od chybějících souborů, přes pády skriptů (PHP fatal errors) až po start/stop serveru.

Access Log (Přístupový protokol)

Záznam o každém HTTP požadavku, který server obdržel. Obsahuje IP, čas, URL, status kód a velikost odpovědi.

16. Moduly pro informace o serveru

mod_status

Živé informace o běhu serveru (počet workerů, zátěž).

<Location /server-status>
    SetHandler server-status
    Require local
</Location>

mod_info

Informace o konfiguraci serveru a modulech.

17. Externí filtry (mod_ext_filter)

Použití externích CLI programů jako filtrů.

ExtFilterDefine gzip mode=output cmd="/bin/gzip" intype=text/html
SetOutputFilter gzip

⚠️ Performance: Spouštění externích procesů je pomalé!

18. CGI (Common Gateway Interface)

CGI je standardní protokol, který definuje, jak webový server deleguje generování obsahu externímu spustitelnému programu (skriptu). Umožňuje vytvářet dynamické stránky, zpracovávat formuláře a přistupovat k databázím.

Princip fungování a Moduly

Komunikace Server ↔ Skript

Server předává skriptu informace pomocí proměnných prostředí a standardního vstupu (STDIN).

Struktura CGI skriptu

Aby server výstup přijal, musí skript dodržet formát HTTP odpovědi.

#!/bin/bash
echo "Content-Type: text/html"   # Povinná hlavička (MIME typ)
echo ""                          # Povinný prázdný řádek (oddělovač hlaviček a těla)
echo "<html>Hello World</html>"  # Tělo odpovědi

19. SSI (Server Side Includes)

SSI je jednoduchý skriptovací jazyk interpretovaný serverem, který slouží k vkládání dynamického obsahu do statických HTML stránek (např. společné hlavičky/patičky, datum).

Syntaxe a Zpracování

Formát příkazu vypadá jako HTML komentář: <!--#element attribute=value -->. Server musí soubory parsovat (hledat tyto značky), což zvyšuje režii.

Hlavní elementy (Příkazy)

Flow Control (Podmínky)

SSI podporuje základní podmínky if, elif, else. Lze porovnávat řetězce nebo používat regulární výrazy.

<!--#if expr="${HTTP_USER_AGENT} =~ /Mobile/" -->
  Zobrazit mobilní menu
<!--#endif -->

20. Actions (mod_actions)

Mechanismus, který umožňuje spustit CGI skript, když je vyžádán určitý typ souboru. Funguje jinak než Filtry.

Rozdíl Filter vs. CGI vs. Action

Princip fungování

Skript (Action handler) dostane informace o původně požadovaném souboru v proměnných:

Typické využití: Vlastní zobrazení textových souborů, syntax highlighting, nebo zpracování PUT požadavků (upload souborů).

21. Autentizace a Autorizace (Pokročilé)

Kromě základního jména/hesla (Basic Auth) existují pokročilejší metody ověřování a řízení přístupu.

Klientské certifikáty (Mutual SSL/TLS)

Nejbezpečnější forma autentizace. Server neověřuje uživatele heslem, ale kryptografickým certifikátem, který má uživatel v prohlížeči.

Kombinace pravidel

Pomocí kontejnerů jako <RequireAny> nebo <RequireAll> lze kombinovat různé metody. Například: Povolit přístup bez hesla z lokální sítě, ale vyžadovat heslo při přístupu z internetu.

22. SSL/TLS - Bezpečnost přenosu

Protokoly zajišťující šifrování, integritu a autentizaci na internetu. HTTPS je HTTP tunelované skrze SSL/TLS.

PKI (Public Key Infrastructure)

TLS Handshake (Zjednodušeně)

  1. Client Hello: Klient pošle podporované šifry a náhodná data.
  2. Server Hello: Server vybere šifru a pošle svůj certifikát.
  3. Ověření: Klient ověří platnost certifikátu (datum, podpis CA, hostname).
  4. Key Exchange: Pomocí asymetrické kryptografie se bezpečně vytvoří symetrický klíč (session key).
  5. Finished: Odteď je komunikace šifrována symetrickým klíčem (je to rychlejší).

SNI (Server Name Indication)

Řeší problém, jak provozovat více HTTPS webů na jedné IP adrese. Protože šifrování začíná dříve, než server dostane HTTP hlavičku Host, klient musí poslat jméno serveru už během TLS Handshake (v "Client Hello").

23. Proxy Server

Proxy (zástupce) funguje jako prostředník v komunikaci.

Typy Proxy

Load Balancing (mod_proxy_balancer)

Rozděluje zátěž mezi více backend serverů.

24. Rewrite (mod_rewrite)

Mocný nástroj pro přepisování URL "za letu" na základě složitých pravidel a regulárních výrazů.

Princip a Využití

Používá se pro SEO friendly URL (např. přepis /produkt/123 na shop.php?id=123), přesměrování při změně domény nebo vynucení HTTPS.

Syntaxe Pravidel

RewriteRule Pattern Substitution [Flags]

RewriteCond (Podmínky)

Umožňuje provést RewriteRule jen tehdy, pokud je splněna podmínka (např. "pouze pokud soubor neexistuje" nebo "pouze pro určitou IP").