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

Маршрутизация имён хостов

Вы можете использовать dynamic dispatch Workers для маршрутизации миллионов vanity-доменов или поддоменов на Workers без обращения к традиционным лимиты маршрутов. Такими именами хостов могут быть поддомены в рамках вашего управляемого домена (например, customer1.saas.com) или vanity-доменов, контролируемых вашими конечными клиентами (например, mystore.com), которым можно управлять через пользовательские имена хостов.

Настройте подстановочное Маршрут (*/*) на вашем домене SaaS (домене, где вы настраиваете пользовательские имена хостов), чтобы она указывала на ваш Worker динамической диспетчеризации. Это позволяет вам:

Если вы хотите исключить определённые имена хостов из маршрутизации на dispatch Worker, у вас есть два варианта:

Настройка

Настройка маршрутизации имён хостов с помощью подстановочного маршрута:

  1. Настройте пользовательские имена хостов: Настройте свой домен и пользовательские имена хостов с помощью Cloudflare for SaaS
  2. Задайте резервный исходный сервер: Настройте резервный исходный сервер, именно сюда будут направляться все пользовательские имена хостов. Если вы хотите направлять их на разные origin-серверы, можно использовать пользовательский исходный сервер. Запросы сначала проходят через Worker и только потом достигают origin-сервера. Если Worker сам является origin-сервером, укажите для резервного исходного сервера фиктивную DNS-запись (например, A 192.0.2.0).
  3. Настройте DNS: Направьте DNS-записи (поддомены или пользовательское имя хоста) через Запись CNAME на домен SaaS. Если вашим клиентам нужно проксировать apex-имя хоста (например, example.com) и не можете использовать CNAME-записи, ознакомьтесь с Apex Proxying.
  4. Создайте подстановочный маршрут: Добавьте */* маршрут в домене вашей платформы (например, saas.com) и свяжите его со своим dispatch Worker.
  5. Реализуйте логику диспетчеризации: Добавьте в свой dispatch Worker логику маршрутизации по имени хоста, которая ищет сопоставления, хранящиеся в Workers KV, или используйте пользовательские метаданные подключённых к пользовательским именам хоста.

Пример dispatch Worker

export default {
	async fetch(request, env) {
		const hostname = new URL(request.url).hostname;

		// Get custom hostname metadata for routing decisions
		const hostnameData = await env.KV.get(`hostname:${hostname}`, {
			type: "json",
		});

		if (!hostnameData?.workerName) {
			return new Response("Hostname not configured", { status: 404 });
		}

		// Route to the appropriate user Worker
		const userWorker = env.DISPATCHER.get(hostnameData.workerName);
		return await userWorker.fetch(request);
	},
};

Маршрутизация поддоменов

Если вам нужно маршрутизировать только записи поддоменов (например, customer1.saas.com), вы можете использовать более точный маршрут (*.saas.com/*) для маршрутизации запросов к вашему Worker динамической диспетчеризации.

Настройка

Настройка маршрутизации поддоменов:

  1. Создайте подстановочную DNS-запись с оранжевым облаком: *.saas.com которая указывает на origin. Если сам Worker является origin, можно использовать произвольное значение DNS (например, A 192.0.2.0).
  2. Задайте подстановочный маршрут: *.saas.com/* указывающую на ваш dispatch Worker
  3. Добавьте в dispatch Worker логику для маршрутизации запросов по поддоменам к нужному Worker.

Пример dispatch Worker для поддоменов

export default {
	async fetch(request, env) {
		const url = new URL(request.url);
		const subdomain = url.hostname.split(".")[0];

		// Route based on subdomain
		if (subdomain && subdomain !== "saas") {
			const userWorker = env.DISPATCHER.get(subdomain);
			return await userWorker.fetch(request);
		}

		return new Response("Invalid subdomain", { status: 400 });
	},
};

Поведение O2O

Если ваши клиенты тоже используют Cloudflare и направляют свой пользовательский домен на вашу зону SaaS через CNAME-запись (например, mystore.com → saas.com), поведение маршрутизации Worker зависит от того, проксируется ли DNS-запись клиента (оранжевое облако) или работает в режиме DNS-only (серое облако). Подробнее об этом читайте в Настройки O2O

Это может привести к непоследовательному поведению при использовании определённых маршрутов имени хоста:

Поскольку вы можете не иметь контроля над настройками DNS-прокси у своего клиента, мы рекомендуем использовать */* подстановочный маршрут, чтобы логика маршрутизации всегда работала предсказуемо, независимо от настройки DNS.

Вызов Worker при разных конфигурациях маршрутов и режимах прокси

В таблице ниже показано, когда вызываются Workers в зависимости от шаблона маршрута и настроек DNS-прокси клиента:

Шаблон маршрута Пользовательское имя хоста (оранжевое облако) Пользовательское имя хоста (серое облако)
*/* (Рекомендуется) ✅ ✅
Целевой маршрут имени хоста ✅ ❌
Маршрут пользовательского имени хоста ❌ ✅