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)
- Deklarace DOCTYPE: Tento řádek na samém začátku souboru (např.
<!DOCTYPE html>) je povinný pro HTML 4.01 a novější. Říká prohlížeči, v jaké verzi jazyka je stránka napsána, aby věděl, jak ji má vykreslit (tzv. "Standards mode" vs "Quirks mode").
- Kořenový element (
<html>): Obaluje celý dokument. Vše ostatní musí být uvnitř něj.
- Hlavička (
<head>):
- Slouží pro prohlížeč a vyhledávače, uživatel ji přímo nevidí v okně stránky.
- Obsahuje metadata (informace o datech): titulek stránky, znakovou sadu (kódování), klíčová slova pro SEO a odkazy na CSS styly či skripty.
- Tělo (
<body>): Zde je vlastní viditelný obsah stránky (texty, obrázky, formuláře), který server posílá uživateli.
XHTML (Extensible HyperText Markup Language)
- Princip: Jedná se o HTML přepsané do syntaxe XML. Zatímco klasické HTML je benevolentní k chybám, XHTML vyžaduje striktní dodržování pravidel XML.
- Důležité vlastnosti (rozdíly):
- Přísnější syntaxe: Všechny tagy musí být uzavřené (např.
<br /> místo <br>), atributy musí být v uvozovkách.
- Musí být tzv. "well-formed": Pokud dokument obsahuje syntaktickou chybu, XML parser ho odmítne zpracovat (na rozdíl od HTML parseru, který se chybu pokusí "odhadnout").
- Kódování: Pokud není uvedeno jinak (deklarací
<?xml encoding="..."?>), XML standardně předpokládá kódování UTF-8 nebo UTF-16.
2. URL/URI/IRI - Adresování zdrojů
Aby server věděl, co má vydat, musíme zdroje jednoznačně identifikovat.
Základní koncepty
- URI (Uniform Resource Identifier): Obecný identifikátor zdroje. Jen říká "kdo to je" nebo "kde to je". Je to nadmnožina, která zahrnuje URL i URN.
- URL (Uniform Resource Locator): Konkrétní typ URI, který říká kde se zdroj nachází a jak se k němu dostat (obsahuje protokol/přístupovou metodu, např.
http://). Každá URL je zároveň URI.
- IRI (Internationalized Resource Identifier): Rozšíření URI pro podporu národních abeced (Unicode). Zatímco URL povoluje jen omezenou sadu ASCII znaků, IRI dovoluje psát adresy s diakritikou, čínskými znaky atd. (v pozadí se pak převádí).
Struktura URL
scheme://user:password@host:port/url-path?parametr1=hodnota1#fragment
Rozbor částí:
- Scheme (Protokol): Určuje, jak se má komunikovat (http, https, ftp, mailto).
- User/password: Dříve se používalo pro přihlášení v URL, dnes je to deprecated (zastaralé) a bezpečnostní riziko (heslo je vidět v historii prohlížeče).
- Host: Adresa serveru – buď doménové jméno (www.example.com) nebo IP adresa.
- Port: Číslo brány na serveru. Pokud není uvedeno, prohlížeč doplní výchozí (80 pro HTTP, 443 pro HTTPS).
- Path (Cesta): Cesta k souboru na serveru (virtuální cesta, nemusí odpovídat disku).
- Query string: Data posílaná metodou GET (za otazníkem). Používá se pro předávání parametrů skriptům.
- Fragment (Kotva): Část za
#. Důležité: Tato část se neposílá serveru! Zpracovává ji pouze prohlížeč pro skrollování na konkrétní místo v dokumentu.
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č.
- Bezpečné znaky: Písmena (a-z), čísla (0-9) a pár symbolů (
- _ . ~). Tyto se přenášejí tak, jak jsou.
- Nebezpečné a rezervované znaky: Znaky jako mezera,
/, ?, & mají v URL speciální význam (oddělovače). Pokud je chceme použít jako data (např. v názvu souboru), musíme je zakódovat.
- Způsob kódování: Používá se znak
% následovaný hexadecimální hodnotou znaku.
Příklady: Mezera se změní na %20, lomítko uvnitř názvu na %2F.
3. Protokol HTTP
HTTP je jazyk, kterým se domlouvá prohlížeč se serverem.
Základní vlastnosti HTTP/1.0
- Textový protokol: Data (hlavičky) jsou čitelný text, nikoliv binární kód. Lze je číst člověkem (např. přes telnet).
- Bezestavový (Stateless): Server si mezi jednotlivými požadavky nic nepamatuje. Každý dotaz je "nový". Pokud chceme udržet přihlášení, musíme to řešit dodatečně (cookies, sessions).
- Model Request-Response: Klient pošle dotaz, server odpoví a spojení se ukončí.
HTTP/1.1 - Klíčová vylepšení
- Hlavička Host (Povinná): Umožňuje Virtual Hosting. V HTTP 1.0 server nevěděl, jakou doménu klient chce (znal jen IP). V 1.1 klient v hlavičce pošle "chci web example.com", takže na jedné IP může běžet více webů.
- Persistent connection (Keep-Alive): V 1.0 se pro každý obrázek otevíralo nové TCP spojení (pomalé). V 1.1 zůstává "roura" otevřená pro více požadavků za sebou, což výrazně snižuje latenci.
- Chunked encoding: Umožňuje serveru posílat data postupně, aniž by na začátku věděl, jak budou velká (vhodné pro dynamicky generovaný obsah).
- Cache-Control: Lepší nástroje pro řízení toho, co si má prohlížeč pamatovat v mezipaměti.
HTTP/2 a HTTPS
- HTTP/2: Je binární (efektivnější strojové zpracování), podporuje Multiplexing (více požadavků naraz v jednom spojení bez čekání) a kompresi hlaviček (úspora dat).
- HTTPS: Standardní HTTP zabalené do šifrovaného tunelu (SSL/TLS). Zajišťuje, že nikdo po cestě data nepřečte ani nezmění. Běží na portu 443.
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
- GET: "Dej mi data." Je bezpečná (nic nemění) a idempotentní (opakování má stejný efekt). Lze cachovat.
- POST: "Zpracuj tato data." Používá se pro formuláře. Není idempotentní (když odešlete platbu dvakrát, odečte se dvakrát).
- PUT: "Ulož tento soubor." Slouží k nahrání nebo kompletnímu přepsání zdroje na dané URL.
- DELETE: "Smaž tento zdroj."
- HEAD: Jako GET, ale server pošle jen hlavičky, ne tělo. Užitečné pro kontrolu, zda soubor existuje nebo jak je velký, aniž bychom ho stahovali.
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.
- Princip: Web A běží na IP 1.2.3.4, Web B běží na IP 1.2.3.5.
- Výhoda: Funguje i s velmi starými klienty.
- Nevýhoda: Potřebujete unikátní veřejnou IP pro každý web, což je dnes drahé a neefektivní (IPv4 došly).
Name-based Virtual Hosting (Podle jména)
Standardní metoda dnes. Využívá vlastnosti HTTP/1.1.
- Princip: Všechny weby běží na jedné IP adrese. Apache rozliší, který web zobrazit, podle hlavičky Host, kterou posílá prohlížeč.
- Konfigurace: Definujete bloky
<VirtualHost> a v nich direktivu ServerName.
Proces výběru virtuálního hostitele
Když přijde požadavek, Apache postupuje takto:
- Match IP:Port: Vyfiltruje všechny VH, které naslouchají na dané IP a portu.
- Match ServerName: U těchto kandidátů porovná hlavičku
Host s direktivami ServerName a ServerAlias.
- 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.
- Prefork:
Jak to funguje: Pro každý požadavek spustí samostatný proces. Procesy jsou od sebe izolované.
Použití: Stabilní, bezpečné pro starší knihovny (PHP bez thread-safety). Žere ale hodně paměti RAM.
- Worker:
Jak to funguje: Má méně procesů, ale každý proces má mnoho vláken (threads).
Použití: Rychlejší a úspornější na paměť než Prefork. Vyžaduje "thread-safe" moduly.
- Event:
Jak to funguje: Vylepšený Worker. Má speciální vlákno pro udržování "Keep-Alive" spojení.
Použití: Nejlepší pro moderní weby. Neplýtvá vlákny na uživatele, kteří jen "čtou" a neposílají další požadavky.
Životní cyklus požadavku
Když Apache zpracovává dotaz, prochází těmito fázemi:
- Překlad URI (Name Translation): Zjištění, zda URL odpovídá souboru na disku (DocumentRoot) nebo něčemu jinému (Alias).
- Autentizace a Autorizace: Kdo to je a má sem přístup?
- MIME Type Checking: Co je to za soubor? (např. .html, .jpg).
- Response Generation (Handler): Vygenerování obsahu (přečtení souboru nebo spuštění skriptu).
- Filtrování: Úprava výstupu (např. komprese GZIP).
- 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.
<Directory /cesta>: Platí pro adresář a všechny jeho podadresáře. (Nejpoužívanější).
<Files "soubor.txt">: Platí pro konkrétní soubory bez ohledu na to, v jakém jsou adresáři.
URL kontejnery (Webspace)
Vztahují se k virtuální cestě v prohlížeči (URL).
<Location /admin>: Platí pro URL začínající na /admin. Používá se pro virtuální obsah (status, info), který neleží na disku.
Soubory .htaccess
Umožňují konfiguraci "za běhu" přímo v adresářích webu, bez restartu serveru.
- Výhoda: Uživatelé bez root práv mohou konfigurovat své weby.
- Nevýhoda (Performance): Server musí při každém požadavku prohledávat všechny nadřazené adresáře, zda neobsahují .htaccess. To zpomaluje.
- AllowOverride: V hlavní konfiguraci musíte určit, co .htaccess smí přepsat (např.
AuthConfig pro hesla). Pokud dáte None, .htaccess se ignoruje (nejrychlejší).
9. Mapování Webspace → Filesystem
Jak server ví, který soubor na disku má poslat, když přijde URL?
- DocumentRoot: Základní kotva. Říká: "Když přijde požadavek na
/, podívej se do /var/www/html".
- Alias: Vytvoří virtuální adresář. "Když někdo chce
/obrazky, sáhni do /mnt/data/fotos" (i když to je mimo DocumentRoot).
- ScriptAlias: Funguje jako Alias, ale navíc říká Apache: "Cokoliv je v této složce, neposílej jako text, ale spusť to jako program (CGI)".
- Redirect: Říká klientovi: "Tady už to není, jdi jinam." Server neposílá obsah, ale HTTP kód 3xx a novou adresu.
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:
<RequireAll>: Musí splnit VŠECHNY podmínky (např. "Musí být z firmy" A ZÁROVEŇ "Musí být v admin skupině").
<RequireAny>: Stačí splnit JEDNU (např. "Je na lokální síti" NEBO "Zadal heslo").
⚠️ 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.
- Mechanismus: Server pošle kód 401. Prohlížeč vezme jméno:heslo, zakóduje je do Base64 a pošle v hlavičce.
- Bezpečnost: Base64 není šifrování! Dá se snadno převést zpět. Proto se Basic Auth smí používat pouze přes HTTPS.
- Úložiště: Uživatelé jsou obvykle v souboru vytvořeném utilitou
htpasswd.
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.
- MIME typ (Content-Type):
text/html, image/jpeg
- Jazyk (Content-Language):
cs, en
- Znaková sada (charset):
UTF-8
- Kódování (Content-Encoding):
gzip
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.
default-handler: Prostě pošli obsah souboru (statika).
cgi-script: Spusť soubor jako program a pošli výstup.
server-status: Ignoruj disk, vygeneruj statistiku serveru.
Filtry (Úprava toku dat)
Filtry fungují jako "trubky", kterými data protékají. Můžete jich zapojit více za sebe.
- Input Filter: Zpracovává data od klienta (např. POST body) předtím, než se dostanou ke skriptu.
- Output Filter: Zpracovává odpověď serveru před odesláním klientovi. Typicky DEFLATE (komprese, aby se šetřila data) nebo INCLUDES (doplnění SSI značek).
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.
LogLevel: Určuje citlivost. V produkci typicky warn (varování a chyby), při ladění debug (vypisuje vše).
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.
- Slouží pro statistiky návštěvnosti, audity bezpečnosti a debugování.
- Formát se definuje pomocí
LogFormat.
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
- Princip: Server nespouští kód interně, ale spustí externí program. Výstup tohoto programu (stdout) pošle klientovi jako HTTP odpověď.
- mod_cgi (Prefork MPM): Spouští CGI skripty přímo pomocí volání
fork(). Každý požadavek je nový proces.
- mod_cgid (Worker/Event MPM): Protože u vláknových serverů je fork nákladný/komplikovaný, používá se externí daemon, který vytváří procesy a komunikuje se serverem přes socket.
Komunikace Server ↔ Skript
Server předává skriptu informace pomocí proměnných prostředí a standardního vstupu (STDIN).
- Důležité proměnné:
REQUEST_METHOD: Typ požadavku (GET, POST...).
QUERY_STRING: Parametry z URL (část za otazníkem).
CONTENT_LENGTH: Délka těla požadavku (nutné pro čtení POST dat).
SCRIPT_NAME a PATH_INFO: Cesta ke skriptu a cesta "za" skriptem.
- Vstup a Výstup:
- GET: Data jsou v proměnné
QUERY_STRING.
- POST: Data přicházejí na stdin (standardní vstup), skript musí přečíst přesný počet bytů podle
CONTENT_LENGTH.
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
- Bezpečnost: Skript musí být spustitelný (
chmod +x) a běžet pod uživatelem webserveru. Vstupy je nutné validovat a dekódovat (URL encoding).
- Chyby: "500 Internal Server Error" často znamená Premature end of script headers (chybí prázdný řádek nebo skript spadl před výpisem hlaviček).
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.
- XBitHack: Technika, kdy server parsuje jako SSI pouze ty HTML soubory, které mají nastavený execute bit (
chmod +x), aby se nemusela měnit přípona na .shtml.
Hlavní elementy (Příkazy)
- include: Vloží obsah jiného souboru.
file="...": Relativní cesta k souboru.
virtual="...": URL cesta (může spustit i CGI skript a vložit jeho výstup).
- echo: Vypíše hodnotu proměnné (např.
DATE_LOCAL, HTTP_USER_AGENT).
- exec: Spustí externí příkaz shellu (bezpečnostní riziko, často zakázáno volbou
IncludesNoExec).
- config: Nastavení formátování data nebo velikosti souborů.
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
- Filter: Vezme obsah souboru, upraví ho a pošle dál (např. komprese).
- CGI: Požadavek jde přímo na skript, ten generuje obsah.
- Action: Požadavek jde na soubor, ale server místo toho spustí definovaný skript a předá mu cestu k původnímu souboru.
Princip fungování
Skript (Action handler) dostane informace o původně požadovaném souboru v proměnných:
PATH_TRANSLATED: Absolutní cesta k souboru na disku.
REDIRECT_URL: Původní URL.
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.
- Princip: Během SSL Handshake si server vyžádá certifikát klienta. Server ověří, zda byl certifikát vydán důvěryhodnou certifikační autoritou (CA).
- SSLProměnné: Po úspěšném ověření jsou detaily certifikátu dostupné v proměnných (např.
SSL_CLIENT_S_DN_CN pro jméno uživatele).
- Konfigurace: Vyžaduje
SSLVerifyClient require a definici CA souboru.
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)
- Asymetrická kryptografie: Používá páry klíčů. Privátní klíč (tajný, na serveru) a Veřejný klíč (v certifikátu). Co se jedním zašifruje, druhým se dešifruje.
- Certifikát: Digitální doklad obsahující veřejný klíč, údaje o vlastníkovi (CN - Common Name) a podpis vydavatele (CA).
- CA (Certificate Authority): Důvěryhodná třetí strana, která garantuje identitu serveru.
TLS Handshake (Zjednodušeně)
- Client Hello: Klient pošle podporované šifry a náhodná data.
- Server Hello: Server vybere šifru a pošle svůj certifikát.
- Ověření: Klient ověří platnost certifikátu (datum, podpis CA, hostname).
- Key Exchange: Pomocí asymetrické kryptografie se bezpečně vytvoří symetrický klíč (session key).
- 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
- Forward Proxy: Zastupuje klienty (např. ve firmě). Klient ví o proxy. Použití: filtrování obsahu, anonymizace, caching pro síť.
- Reverse Proxy: Zastupuje servery. Klient neví o proxy (myslí si, že mluví s cílovým serverem). Použití: Load balancing, SSL offloading, ochrana backendu.
Load Balancing (mod_proxy_balancer)
Rozděluje zátěž mezi více backend serverů.
- Algoritmy:
byrequests (počítá požadavky), bytraffic (objem dat).
- Sticky Sessions: Zajišťuje, aby klient během jedné relace (session) komunikoval stále se stejným backend serverem (nutné pro aplikace, které si ukládají stav do paměti).
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]
- Pattern: Regulární výraz, který se hledá v URL.
- Substitution: Čím se má URL nahradit.
- Flags (Příznaky): Modifikují chování.
[L] (Last): Pokud pravidlo sedí, ukonči zpracování a proveď přepis.
[R] (Redirect): Pošli klientovi HTTP přesměrování (změní se URL v adresním řádku).
[QSA]: Připojí k nové URL i původní query string (parametry).
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").