INTEGRITY Dokumentace

Trasy

Kontext

Trasy umožňují uživatelům namapovat vzor URL na Worker. Jakmile do sítě Cloudflare přijde požadavek odpovídající zadanému vzoru URL, na dané trase se spustí váš Worker.

Trasy jsou sada pravidel, která se vyhodnocují vůči URL požadavku. Trasy se doporučují, pokud máte vyhrazený aplikační server, se kterým potřebujete vždy komunikovat. Volání fetch() na příchozí Request objekt spustí subrequest na váš aplikační server podle definice v DNS nastavení vaší zóny Cloudflare.

Trasy přidávají funkcionalitu Workers k vašim stávajícím proxovaným hostname umístěným před aplikačním serverem. Díky tomu mohou vaše Workers fungovat jako proxy a provést veškerou potřebnou práci ještě předtím, než požadavek dosáhne aplikačního serveru za Cloudflare.

Trasy fungují s vašimi aplikacemi definovanými v Cloudflare DNS

Trasy mohou fetch() Custom Domains a mají přednost, pokud jsou nakonfigurovány na stejném hostname. Pokud chcete před svou aplikaci umístit například logovací Worker, můžete pro svůj aplikační Worker vytvořit Custom Domain pro app.example.com, a vytvořte trasu (Route) pro váš protokolovací Worker na app.example.com/*. Volání fetch() vyvolá aplikační Worker na vaší Custom Domain. Routes přitom nemohou být cílem přesměrování v rámci stejné zóny fetch() volání.

Nastavit trasu

Chcete-li přidat trasu, musíte mít:

  1. aktivní zóna Cloudflare.
  2. Worker, který se má vyvolat.
  3. DNS záznam nastavený pro doména nebo subdoména proxované službou Cloudflare (také známé jako s oranžovým mrakem) na kterou chcete směrovat.

Pokud váš Worker není origin serverem vaší aplikace, nastavte trasu podle níže uvedených pokynů.

Nastavit trasu v dashboardu

Než nastavíte trasu (route), ujistěte se, že máte nastavený DNS záznam pro doména nebo subdoména na které chcete směrovat.

Chcete-li v dashboardu nastavit trasu:

  1. V dashboardu Cloudflare přejděte na Workers & Pages stránce.

    Přejděte na Workers & Pages ↗
  2. V Přehled, vyberte svého Workera.

  3. Přejděte na Nastavení > Domains & Routes > Přidat > Trasa.

  4. Vyberte zónu a zadejte vzor trasy.

  5. Vyberte Přidat trasu.

Nastavit trasu v konfiguračním souboru Wrangler

Než nastavíte trasu (route), ujistěte se, že máte nastavený DNS záznam pro doména nebo subdoména na které chcete směrovat.

Chcete-li nakonfigurovat trasu pomocí svého Konfigurační soubor Wrangler, viz následující příklad.

{
	"routes": [
		{
			"pattern": "subdomain.example.com/*",
			"zone_name": "example.com"
		},
		// or
		{
			"pattern": "subdomain.example.com/*",
			"zone_id": "<YOUR_ZONE_ID>"
		}
	]
}
[[routes]]
pattern = "subdomain.example.com/*"
zone_name = "example.com"

[[routes]]
pattern = "subdomain.example.com/*"
zone_id = "<YOUR_ZONE_ID>"

Přidejte zone_name nebo zone_id možnost za každou trasou. zone_name a zone_id možnosti jsou vzájemně zaměnitelné. Pokud používáte zone_id, ID zóny zjistíte takto:

  1. Přejděte na stránku Zone Overview v dashboardu Cloudflare.

    Přejděte na Přehled ↗
  2. Najděte Zone ID na levé straně Přehled.

Chcete-li přidat více tras:

{
	"routes": [
		{
			"pattern": "subdomain.example.com/*",
			"zone_name": "example.com"
		},
		{
			"pattern": "subdomain-two.example.com/example",
			"zone_id": "<YOUR_ZONE_ID>"
		}
	]
}
[[routes]]
pattern = "subdomain.example.com/*"
zone_name = "example.com"

[[routes]]
pattern = "subdomain-two.example.com/example"
zone_id = "<YOUR_ZONE_ID>"

Chování při shodě

Vzory tras vypadají takto:

https://*.example.com/images/*

Tento pattern by odpovídal všem HTTPS požadavkům směřujícím na subhost domény example.com, jejichž cesta začíná /images/.

Vzor odpovídající všem požadavkům vypadá takto:

*example.com/*

Ačkoli vypadají podobně jako regulární výraz vzoru platí, že route patterns se řídí konkrétními pravidly:

Route lze zadat, aniž by byla přiřazená k Workeru. Taková route pak potlačí všechny méně specifické vzory. Uvažujme například tuto dvojici vzorů route, jeden se skriptem Workers a jeden bez něj:

*example.com/images/cat.png -> <no script>
*example.com/images/*       -> worker-script

V tomto příkladu jsou všechny požadavky směřující na example.com, jejichž cesta začíná /images/ by bylo směrováno na worker-script, kromě pro /images/cat.png, které by Workers zcela obešly. Požadavky s cestou /images/cat.png?foo=bar by bylo směrováno na worker-script, kvůli přítomnosti query stringu.

Platnost

Platnost vzoru trasy (route pattern) se řídí následující sadou pravidel.

Vzory tras musí obsahovat vaši zónu

Pokud je vaše zóna example.com, pak nejjednodušší možný route pattern, jaký můžete mít, je example.com, které by odpovídaly http://example.com/ a https://example.com/, a nic jiného. Stejně jako u URL adresy je implicitní cestou / pokud žádnou nezadáte.

Vzory tras nesmí obsahovat žádné parametry dotazu

Například https://example.com/?anything není platný vzor cesty.

Vzory tras mohou volitelně začínat na http:// nebo https://

Pokud ve vzoru trasy vynecháte schéma, bude odpovídat oběma variantám http:// a https:// URL adres. Pokud zahrnete http:// nebo https://, bude odpovídat pouze požadavkům HTTP, respektive HTTPS.

Hostname mohou volitelně začínat na *

Pokud název hostitele ve vzoru trasy začíná na *, pak odpovídá hostiteli a všem subhostitelům. Pokud hostname v route pattern začíná *., pak odpovídá pouze všem subhostitelům.

Následující příklady ukazují rozdíl mezi *example.com/* a *.example.com/*:

Request URL *example.com/* *.example.com/*
https://example.com/ Shody Neshoduje se
https://www.example.com/path Shody Shody
https://myexample.com/ Shody Neshoduje se
https://not-example.com/ Neshoduje se Neshoduje se

Cesty mohou volitelně končit na *

Pokud cesta ve vzoru trasy končí na *, pak odpovídá všem příponám této cesty.

Domény a subdomény musí mít DNS záznam

Všechny domény a subdomény musí mít DNS záznam aby byla proxována přes Cloudflare a použita k vyvolání Workeru. Pokud chcete například umístit Worker na myname.example.com, a přidali jste example.com do Cloudflare, ale nepřidali jste žádné DNS záznamy pro myname.example.com, jakýkoli požadavek na myname.example.com povede k chybě ERR_NAME_NOT_RESOLVED.