INTEGRITY Документация

Маршруты

Контекст

Маршруты позволяют связать шаблон URL с Worker. Когда в сеть Cloudflare поступает запрос, соответствующий указанному шаблону URL, ваш Worker выполняется на этом маршруте.

Маршруты представляют собой набор правил, которые проверяются по URL запроса. Их рекомендуется использовать, если у вас есть выделенный сервер приложений, с которым вы всегда должны взаимодействовать. Вызов fetch() для входящего Request объект инициирует подзапрос (subrequest) к серверу приложения, как указано в DNS настройки вашей зоны Cloudflare.

Маршруты подключают функциональность Workers к вашим существующим проксируемым хостам перед сервером приложений. Это позволяет Worker выступать в роли прокси и выполнять необходимую работу перед обращением к серверу приложений, расположенному за Cloudflare.

Маршруты работают с приложениями, определёнными в Cloudflare DNS

Маршруты могут fetch() Custom Domains и обладают более высоким приоритетом, если настроены для одного и того же хоста. Если вы хотите разместить перед приложением логирующий Worker, вы можете, например, создать Custom Domain для Worker приложения на app.example.com, и создайте маршрут (Route) для вашего логирующего Worker по адресу app.example.com/*. Вызов fetch() вызовет Worker приложения на вашем Custom Domain. Обратите внимание, что маршруты не могут быть целью для одной зоны fetch() вызов.

Настройка маршрута

Чтобы добавить маршрут, у вас должно быть:

  1. Одна активная зона Cloudflare.
  2. Worker для вызова.
  3. DNS запись, настроенная для домен или поддомен проксируемые Cloudflare (также известные как с оранжевым облаком) на который вы хотите направлять маршрут.

Если ваш Worker не является источником вашего приложения, следуйте инструкциям ниже, чтобы настроить маршрут.

Настройка маршрута в панели управления

Прежде чем настроить маршрут, убедитесь, что у вас настроена DNS-запись для домен или поддомен хотите перенаправлять.

Чтобы настроить маршрут в дашборде:

  1. На панели управления Cloudflare перейдите к разделу Workers & Pages страницу.

    Перейдите в Workers & Pages ↗
  2. В Обзор, выберите ваш Worker.

  3. Перейдите в Настройки > Domains & Routes > Add > Маршрут.

  4. Выберите зону и введите шаблон маршрута.

  5. Выберите Добавить маршрут.

Настройка маршрута в файле конфигурации Wrangler

Прежде чем настроить маршрут, убедитесь, что у вас настроена DNS-запись для домен или поддомен хотите перенаправлять.

Чтобы настроить маршрут с помощью конфигурационный файл Wrangler, см. следующий пример.

{
	"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>"

Добавьте zone_name или zone_id параметр после каждого маршрута. zone_name и zone_id параметры взаимозаменяемы. Если используется zone_id, найдите свой zone ID следующим образом:

  1. Перейдите на страницу Zone Overview в панели управления Cloudflare.

    Перейдите в Обзор ↗
  2. Найдите Zone ID в левой части Обзор.

Чтобы добавить несколько маршрутов:

{
	"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>"

Поведение сопоставления

Шаблоны маршрутов выглядят так:

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

Этот шаблон соответствует всем HTTPS запросам к субдомену example.com, пути которых начинаются с /images/.

Шаблон, соответствующий всем запросам, выглядит так:

*example.com/*

Хотя они похожи на регулярное выражение шаблон, шаблоны маршрутов подчиняются определённым правилам:

Маршрут можно задать, не привязывая его к Worker. Такой маршрут будет отменять действие менее конкретных шаблонов. Например, рассмотрим пару шаблонов маршрутов: один со скриптом Workers, другой без него:

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

В этом примере все запросы, предназначенные для example.com и пути которых начинаются с /images/ будет перенаправлен на worker-script, кроме для /images/cat.png, который бы полностью обошёл Workers. Запросы с путём /images/cat.png?foo=bar будет перенаправлен на worker-script, из-за наличия строки запроса.

Действительность

Следующий набор правил определяет допустимость паттерна маршрута.

Шаблоны маршрутов должны включать вашу зону

Если ваша зона example.com, тогда простейшим возможным шаблоном маршрута будет example.com, который бы соответствовал http://example.com/ и https://example.com/, и ничего больше. Как и в случае с URL, подразумевается путь / если вы его не укажете.

Шаблоны маршрутов не могут содержать параметры запроса

Например, https://example.com/?anything не является допустимым шаблоном маршрута.

Шаблоны маршрутов могут, при необходимости, начинаться с http:// или https://

Если вы не укажете схему в шаблоне маршрута, он будет соответствовать обоим http:// и https:// URL. Если вы включите http:// или https://, он будет соответствовать только запросам HTTP или HTTPS соответственно.

Имена хостов могут при желании начинаться с *

Если имя хоста в шаблоне маршрута начинается с *, он соответствует хосту и всем его поддоменам. Если имя хоста в шаблоне маршрута начинается с *., он соответствует только всем поддоменам.

Следующие примеры иллюстрируют разницу между *example.com/* и *.example.com/*:

Request URL *example.com/* *.example.com/*
https://example.com/ Совпадения Не соответствует
https://www.example.com/path Совпадения Совпадения
https://myexample.com/ Совпадения Не соответствует
https://not-example.com/ Не соответствует Не соответствует

Пути могут при желании заканчиваться на *

Если путь в шаблоне маршрута заканчивается на *, он соответствует всем суффиксам этого пути.

Домены и поддомены должны иметь DNS-запись

У всех доменов и поддоменов должен быть DNS-запись проксироваться через Cloudflare и использоваться для вызова Worker. Например, если вы хотите разместить Worker на myname.example.com, и вы добавили example.com в Cloudflare, но ещё не добавили ни одной записи DNS для myname.example.com, любой запрос к myname.example.com приведёт к ошибке ERR_NAME_NOT_RESOLVED.