← Cloudflare Workers / workers / configuration / routing
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 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:
- aktivní zóna Cloudflare.
- Worker, který se má vyvolat.
- 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:
-
V dashboardu Cloudflare přejděte na Workers & Pages stránce.
Přejděte na Workers & Pages ↗ -
V Přehled, vyberte svého Workera.
-
Přejděte na Nastavení > Domains & Routes > Přidat > Trasa.
-
Vyberte zónu a zadejte vzor trasy.
-
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:
-
Přejděte na stránku Zone Overview v dashboardu Cloudflare.
Přejděte na Přehled ↗ -
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:
-
Jediným podporovaným operátorem je zástupný znak (
*), který odpovídá nule nebo více libovolným znakům. -
Vzory tras nesmí obsahovat vložené zástupné znaky ani parametry dotazu. Například ani
example.com/*.jpganiexample.com/?foo=*jsou platné vzory tras. -
Pokud by URL požadavku mohlo odpovídat více vzorů tras, vyhrává nejspecifičtější z nich. Například vzor
www.example.com/*by mělo přednost před*.example.com/*při porovnávání požadavku nahttps://www.example.com/. Vzorexample.com/hello/*by mělo přednost předexample.com/*při porovnávání požadavku naexample.com/hello/world. -
Porovnávání vzorů tras bere v úvahu celou URL požadavku, včetně řetězce parametrů dotazu. Protože vzory tras nesmí obsahovat parametry dotazu, jediný způsob, jak docílit toho, aby vzor trasy odpovídal adresám URL s parametry dotazu, je ukončit ho zástupným znakem,
*. -
Komponenta cesty ve vzorech tras rozlišuje velká a malá písmena, například
example.com/Images/*aexample.com/images/*jsou dvě odlišné trasy. -
U routes vytvořených před 15. říjnem 2023 rozlišuje komponenta hostitele ve vzorech routes velká a malá písmena, například
example.com/*aExample.com/*jsou dvě odlišné trasy. -
U routes vytvořených 15. října 2023 nebo později komponenta hostitele ve vzorech routes nerozlišuje velká a malá písmena, například
example.com/*aExample.com/*jsou rovnocenné trasy.
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-scriptV 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.
-
https://*.example.com/odpovídáhttps://www.example.com/ale nehttp://www.example.com/. -
*.example.com/odpovídá jakhttps://www.example.com/ahttp://www.example.com/.
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.
-
*example.com/odpovídáhttps://example.com/ahttps://www.example.com/. -
*.example.com/odpovídáhttps://www.example.com/ale nehttps://example.com/.
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.
https://example.com/path*odpovídáhttps://example.com/pathahttps://example.com/path2ahttps://example.com/path/readme.txt
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.