-
Notifications
You must be signed in to change notification settings - Fork 0
Reverse proxy
Služba, která přijímá požadavky z internetu a rozděluje je mezi vnitřní aplikace podle doménového jména. Pro self-hosting je to prakticky povinná součást.
Stručný přehled ostatních možností vzdáleného přístupu je ve vzdáleném přístupu.
flowchart LR
I[Internet] --> P[Reverse proxy<br/>:443]
P -->|nas.example.cz| A[NAS :5000]
P -->|foto.example.cz| B[Immich :2283]
P -->|home.example.cz| C[Home Assistant :8123]
P -->|git.example.cz| D[Forgejo :3000]
Jeden otevřený port místo pěti. Ven čouhá jen 443, všechno ostatní zůstane na 127.0.0.1.
Certifikáty na jednom místě. Proxy je vyřídí a obnovuje, aplikace o TLS nemusí vědět.
Aplikace nemusí umět HTTPS. A většina self-hosted aplikací ho neumí dobře.
Jednotné přihlášení. Před aplikace, které autentizaci nemají, můžeš postavit Authelii nebo Authentik.
Změny bez zásahu do aplikace. Přesměrování, komprese, omezení rychlosti, blokace podle IP.
Proxy se rozhoduje podle hlavičky Host, respektive podle SNI při navazování spojení. Ta samá IP adresa a port obslouží libovolný počet domén.
Aby to fungovalo, potřebuješ mít DNS záznamy pro všechny domény směřující na stejnou adresu. Nejjednodušší je wildcard:
*.example.cz A 85.207.12.34
*.example.cz AAAA 2a02:8308:1234:ab00::10
Nezapomeň na AAAA, když máš IPv6.
Tohle je nejčastější zdroj potíží a je dobré rozumět proč. Aplikace za proxy nevidí skutečného klienta — vidí proxy. Musíš jí to říct hlavičkami.
| Hlavička | Co nese | Co se pokazí bez ní |
|---|---|---|
Host |
původní doména | aplikace generuje odkazy na interní adresu |
X-Forwarded-For |
IP klienta | v logu máš pořád adresu proxy, fail2ban blokuje proxy |
X-Forwarded-Proto |
http nebo https | přesměrovací smyčka, odkazy s http://
|
X-Real-IP |
IP klienta | totéž co X-Forwarded-For, jiná konvence |
V nginx je musíš napsat ručně. Caddy a Traefik je nastavují samy.
Aplikace navíc musí být nastavená, aby těm hlavičkám věřila. Django má USE_X_FORWARDED_HOST, Nextcloud trusted_proxies, Home Assistant blok http.use_x_forwarded_for. Bez toho je bude ignorovat, protože věřit jim naslepo by byla bezpečnostní díra.
Aplikace s živou aktualizací (Home Assistant, Grafana, chaty, terminály v prohlížeči) potřebují WebSockety. Ty vyžadují speciální zacházení, protože se HTTP spojení „povýší" na trvalé.
Když ti aplikace načte, ale živá data nechodí a v konzoli prohlížeče vidíš chyby okolo wss://, je to tohle. Řešení je u každé proxy jiné a je popsané na jejich stránkách.
Jak přepnutí spojení probíhá a proč se láme právě tady je v HTTP, QUIC a WebSocketu.
Výchozí nastavení jsou dělaná pro webové stránky, ne pro nahrávání videí na Nextcloud. Když ti upload padá po minutě nebo u větších souborů, jde o tyhle limity — každá proxy je má jinde.
| Caddy | Nginx | Traefik | |
|---|---|---|---|
| HTTPS automaticky | ano, bez konfigurace | ne, přes certbot | ano |
| Konfigurace | nejjednodušší | nejupovídanější | přes štítky kontejnerů |
| Docker integrace | ruční | ruční | automatická |
| Výkon při vysoké zátěži | dobrý | nejlepší | dobrý |
| Materiálů na internetu | méně | nejvíc | středně |
Doporučení pro homelab: Caddy. Tři řádky konfigurace, certifikáty se vyřídí samy, hlavičky nastaví správně bez ptaní. Ušetří ti to hodiny.
Nginx vezmi, když ho už umíš, když potřebuješ něco specifického, nebo když jedeš vysokou zátěž.
Traefik vezmi, když máš hodně kontejnerů, které často přibývají a ubývají — konfiguruje se ze štítků, takže novou službu nastavíš přímo v compose.yml.
Proxy neznamená, že je aplikace bezpečná. Vystavíš-li ven aplikaci s dírou, proxy ti nepomůže. Před cokoliv bez pořádné autentizace dej Authelii, nebo to nech jen za VPN.
Vnitřní služby publikuj jen na loopback. -p 127.0.0.1:3000:3000, viz Docker a firewall. Jinak jsou dostupné i mimo proxy a všechna tvoje pravidla jsou k ničemu.
Nastav rozumné limity. Omezení rychlosti požadavků a maximální velikosti těla požadavku ti ušetří problémy s roboty.
Loguj skutečné IP. Bez správně nastaveného X-Forwarded-For je log k ničemu a fail2ban zablokuje tvoji vlastní proxy.
Našel jsi chybu nebo něco chybí? Založ issue nebo pošli pull request. — Psáno 2026, licence CC BY-SA 4.0
Základy
- Cesta paketu
- Vrstvy a zapouzdření
- MAC, ARP a přepínání
- Prefixy a masky
- Směrování
- DHCP a DNS
- Porty a spojení
- NAT a port forwarding
Domácí síť
IPv6
Linux firewall
TLS a reverse proxy
- TLS a HTTPS
- HTTP, QUIC a WebSocket
- Reverse proxy
- Caddy
- Nginx
- Traefik
- Certifikáty a Let's Encrypt
- Vlastní certifikační autorita
Kryptografie
- Stavební kameny
- Veřejný a soukromý klíč
- Diffie-Hellman
- Hashe, HMAC a podpisy
- Náhodnost a entropie
- TLS handshake
- Postkvantová kryptografie
- Šifrování disků a souborů
Virtualizace a kontejnery
Diagnostika
Vzdálený přístup
Provoz a bezpečnost
Praxe