Proxy

Zpřístupnění vašich služeb na internetu přes výkonné HTTP, TCP a UDP proxy.

Úvod

Proxy zpřístupňuje vaše serverlety světu — směruje příchozí provoz na backend, obvykle serverlet, ale může jít o libovolný host, a vyvažuje zátěž mezi víc než jedním. Každý serverlet dostane výchozí proxy hned při vytvoření, ihned dostupnou na vygenerované adrese; další přidáte pro vlastní domény, další porty nebo jiné služby.

Proxy je jednoho ze tří typů, který zvolíte při vytvoření: HTTP, TCP nebo UDP.

Vytvoření proxy

  • Region — kde proxy běží, nebo Auto.
  • Zdroj — typ (HTTP/HTTPS, TCP nebo UDP) a veřejná doména nebo port.
  • Cíl — jeden nebo víc targetů: protokol, host a port, na který se provoz přeposílá. Přidáním víc než jednoho targetu zapnete mezi nimi vyvažování zátěže.

HTTP

Výchozí typ, který používá většina aplikací. Reverzní proxy na vrstvě 7 pro webový provoz na portech 80/443, s podporou HTTP/1.1, HTTP/2 i HTTP/3. TLS spojení se směrují na správnou proxy podle SNI (hostname, který klient žádá během TLS handshake), takže víc HTTP proxy s různými doménami může sdílet stejnou IP adresu i port.

Doménu k použití proxy nepotřebujete: Futrou ve výchozím stavu vygeneruje náhodnou subdoménu pod *.futrou.cloud, nebo si pod ní zvolíte vlastní subdoménu — v obou případech to funguje okamžitě, včetně TLS. Podporováno je i připojení zcela vlastní domény; viz Vlastní domény níže.

TLS certifikáty

HTTP proxy dostanou TLS certifikát automaticky — není potřeba nic nahrávat ani nastavovat. Futrou certifikáty za vás vyžádá i obnovuje; domény s wildcardem se ověřují přes DNS, ostatní přes HTTP, a ověření využívá stejné kontroly vlastnictví domény jako zbytek platformy.

Možnosti směrování

Pokročilé volby určují, jak se požadavky přeposílají na cíl:

  • Ověřovat TLS certifikát — validuje TLS certifikát cíle. Vypněte jen u důvěryhodných backendů se self-signed certifikátem.
  • Zachovat Host — přepošle originální hlavičku Host požadavku na cíl beze změny. Když je vypnuté, cíl místo toho vidí host (nebo IP) samotného cíle, jako byste se na něj připojili přímo.
  • Zachovat hlavičky / query / cestu — přepošle originální hlavičky, query řetězec a cestu požadavku beze změny místo nahrazení vlastními hodnotami cíle.
  • Sledovat přesměrování — HTTP přesměrování z cílového serveru vyřeší proxy sama, místo aby je předala klientovi.
  • Vynutit HTTPS — přesměruje všechny HTTP požadavky na HTTPS už na okraji sítě.

Komprese

Odpovědi se komprimují automaticky, pokud to klient podporuje a typ obsahu je komprimovatelný (text, JSON, JS, CSS, SVG a podobné) — není potřeba nic nastavovat. Futrou vyjedná nejlepší formát, který dovoluje klientova hlavička Accept-Encoding, s preferencí Zstandard, pak Brotli, pak gzip.

Cache

Proxy respektuje standardní HTTP hlavičky pro cachování z vašeho backendu. Cache-Control: s-maxage určuje, jak dlouho lze odpověď cachovat, a má přednost před max-age, pokud jsou přítomné obě; no-cache, no-store, private nebo max-age=0 znamenají, že se odpověď necachuje. Cachované odpovědi proxy lze kdykoliv vymazat purge akcí, ze stránky proxy nebo přes API — automaticky se nemaže nic, takže po nasazení nové verze backendu purge použijte, pokud jste změnili cachovaný obsah a nechcete čekat, až vyprší přirozeně.

Pravidla

Pravidla umožňují odchytávat příchozí HTTP požadavky a reagovat na ně bez zásahu do vaší aplikace. Pravidlo je podmínka — na základě portu, hostu, cesty nebo HTTP metody — spárovaná s jednou nebo víc akcemi, vyhodnocovaná u každého požadavku ještě předtím, než dorazí na váš backend, a znovu u odpovědi předtím, než dorazí ke klientovi:

  • Přesměrovat požadavek na jinou URL, nebo přepsat jeho cestu.
  • Nastavit nebo smazat hlavičku požadavku či odpovědi.
  • Nastavit metodu nebo tělo požadavku, nebo stavový kód či tělo odpovědi.

Shoda cesty podporuje přesné cesty, vzory ve stylu path-to-regex s pojmenovanými i wildcard segmenty (jako /users/:id nebo /files/**) i syrové regulární výrazy. To pokrývá případy od jednoduchého přesměrování na jedné cestě přes přepisování požadavků ještě před dosažením backendu až po úpravu odpovědi, kterou backend vrací — například odstranění interní hlavičky, nebo vynucení konkrétního stavového kódu.

TCP

Syrový passthrough na vrstvě 4 pro protokoly, které nejsou HTTP. Provoz se přeposílá na váš cíl tak, jak je, bez kontroly nebo úpravy — neplatí komprese, cache, pravidla ani přepis Host, protože žádné z toho nejsou HTTP koncepty.

TCP proxy dostane při vytvoření port automaticky, z pevného rozsahu nad 1024 — konkrétní port si vybrat nejde, včetně známých portů jako 22 nebo 3306. Přidělený port zůstává po celou dobu existence proxy stejný: sám od sebe se nezmění, takže jakmile na host:port jednou nasměrujete klienta, zůstává to funkční.

UDP

Stejné jako TCP, pro protokoly nad UDP: syrový passthrough, automaticky přidělený stabilní port nad 1024, žádné funkce na úrovni HTTP.

Vyvažování zátěže {#vyvažování-zátěže}

Když má proxy víc targetů — libovolného typu — provoz se mezi ně rozděluje jednou ze dvou strategií:

  • Round Robin (výchozí) — rozprostírá požadavky mezi všechny targety v čase, s preferencí těch, které aktuálně úspěšně odpovídají.
  • Primary Failover — posílá vše na první target, další použije jen v případě jeho selhání.

Failover je reaktivní: target se označí jako nedostupný teprve poté, co se k němu požadavek skutečně nepodaří připojit (ne kvůli pomalé odpovědi, a ne proto, že vrátil chybový stavový kód — dostupný target, který odpoví s 5xx, se považuje za platnou odpověď, ne za selhání). Target označený jako nedostupný se po krátkém cooldownu automaticky znovu zkusí, takže se po zotavení vrátí zpátky do rotace. Pokud požadavek na jeden target vysloveně selže, Futrou v rámci stejného požadavku zkusí další target, než to vzdá — samostatný krok „zkusit stejný target znovu” neexistuje, a serverlet target, který spí na nule instancí, se probudí a zkusí znovu místo toho, aby se bral jako nedostupný (viz Škálování na nulu).

Vlastní domény {#vlastní-domény}

Chcete-li místo vygenerované domény *.futrou.cloud použít vlastní, přidejte ji jako zdrojovou doménu proxy a ověřte ji. Ověření kontroluje TXT záznam _futrou na doméně obsahující ID proxy — stejný TXT záznam, jaký automaticky vytváří DNS zóna, takže pokud je DNS domény už na Futrou, ověření obvykle proběhne okamžitě.

Metriky a logy

Stránka každé proxy zobrazuje počty požadavků podle stavového kódu, unikátní návštěvníky a přenesená data, spolu s prohledávatelnými přístupovými logy — hodí se k ověření, že provoz jde tam, kam očekáváte, před změnou i po ní. Formát logů a co dalšího se v projektu zaznamenává popisují Logy.

Naposledy upraveno