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

Расширенная настройка

Отключение Pay Per Crawl по шаблону URI

Вы можете предоставить бесплатный доступ к одним страницам и взимать плату за другие:

Чтобы начать, используйте Configuration Rules чтобы исключить определённые шаблоны URI из платного доступа.

  1. Перейдите в Правила > Обзор в Cloudflare dashboard.

    Перейдите в Обзор ↗
  2. Выберите Создать правило > Configuration Rule.

  3. Когда входящие запросы соответствуют: Задайте шаблон URI.

    • Поле: URI Full
    • Оператор: wildcard
    • Значение: https://*example.com/public/*
  4. Выберите Отключение Pay Per Crawl > Add

  5. Выберите Развернуть.

Примеры шаблонов:

Динамическое ценообразование

Цена, указанная в настройках Pay Per Crawl, по умолчанию применяется ко всей зоне, но вы можете настроить дифференцированную политику ценообразования, выбрав Включите динамическое ценообразование и включения в HTTP-ответы вашего источника crawler-price заголовок. Например:

crawler-price: USD 3.14

Если crawler-price заголовок присутствует в ответе, будет использована указанная в нём цена вместо цены по умолчанию, заданной в настройках Pay Per Crawl для зоны.

Заголовок запроса для динамического ценообразования

Pay Per Crawl adds a cf-pay-per-crawl заголовок к каждому запросу к источнику. Этот заголовок указывает действующий режим ценообразования и может использоваться источником, чтобы решить, включать ли crawler-price заголовок вместе с ответом.

cf-pay-per-crawl: protocol=cloudflare, pricing=in-band

На данный момент единственное возможное значение для protocol индикатор означает cloudflare. Для pricing индикатор: значение может быть одним из следующих:

Используйте Workers для динамического ценообразования

Если вы предпочитаете оставить свой источник без изменений, вы можете использовать Worker, чтобы добавить crawler-price заголовок в ответах. Например, в Worker можно выбирать цену на основе свойств входящего запроса (включая данные, добавленные глобальной сетью Cloudflare) или самого содержимого.

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

function getContentPriceUSD(request, response) {
	const requestPath = new URL(request.url).pathname;

	if (requestPath.startsWith("/premium-content/")) {
		return 3.14;
	}

	if (requestPath.startsWith("/free-content/")) {
		return 0.0;
	}

	return null; // Use the default price set in the zone configuration.
}

export default {
	async fetch(request, env, ctx) {
		// Obtain the response first (and allow it to be cached if possible).
		let response = await fetch(request, { cf: { cacheEverything: true } });

		// Indicates the pricing mode in effect ("bypass", "zone-default", "in-band").
		const cfPayPerCrawl = request.headers.get("CF-Pay-Per-Crawl") || "";

		// If in-band pricing is enabled, use the request/response to select a price.
		if (cfPayPerCrawl.match(/\bpricing=in-band\b/)) {
			const contentPrice = getContentPriceUSD(request, response);

			if (contentPrice !== null) {
				// Make the response mutable, to allow setting the price header.
				response = new Response(response.body, response);
				response.headers.set("Crawler-Price", `USD ${contentPrice.toFixed(2)}`);
			}
		}
		return response;
	}
};

Дополнительные ресурсы