← Cloudflare for Platforms / cloudflare-for-platforms / cloudflare-for-saas / domain-support
Vlastní metadata
Možná budete chtít nakonfigurovat nastavení pro jednotlivé hostitelské názvy (zákazníky) nad rámec možností Rules nebo Rate Limiting.
Nejprve budete muset kontaktovat svůj account team a požádat o povolení přístupu k Custom Metadata. Po nakonfigurování vlastních metadat je můžete využít následujícími způsoby:
- Přečtěte metadata JSON z Cloudflare Workers (vyžaduje přístup k Workers) k definování chování podle jednotlivých hostname.
- Použijte hodnoty vlastních metadat v výrazy pravidel různých bezpečnostních produktů Cloudflare k vymezení rozsahu pravidla.
Příklady
- Přepisování URL adres pro jednotlivé zákazníky: zákazníci 1-10,000 například načítají assety ze serveru A, zákazníci 10,001-20,000 ze serveru B a tak dále.
- Přidání vlastních hlaviček, například
X-Customer-ID: $numberna základě metadat, která jste poskytli - Nastavení hlaviček HTTP Strict Transport Security („HSTS“) pro jednotlivé zákazníky
Další logiku a požadavky proberte se svým Solutions Engineerem.
Odesílání vlastních metadat
Do Cloudflare můžete přidat vlastní metadata přes Custom Hostnames API. Tato data lze přidat pomocí PATCH požadavek ke konkrétnímu ID hostname a nastavte tak metadata pro daný hostname, například:
Požadovaná oprávnění API tokenu
Alespoň jeden z následujících oprávnění tokenu je povinné:SSL and Certificates Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames/$CUSTOM_HOSTNAME_ID" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"ssl": {
"method": "http",
"type": "dv"
},
"custom_metadata": {
"customer_id": "12345",
"redirect_to_https": true,
"security_tag": "low"
}
}'Změny metadat se do 30 sekund rozšíří po celé edge síti Cloudflare.
Přístup k vlastním metadatům z Cloudflare Workeru
Objekt metadat bude u každého požadavku přístupný pomocí request.cf.hostMetadata vlastnost. Data pak můžete číst a pomocí Workeru přizpůsobit jejich chování.
V níže uvedeném příkladu použijeme ve Workeru hodnotu user_id, která byla odeslána prostřednictvím výše uvedeného volání API "custom_metadata":{"customer_id":"12345","redirect_to_https": true,"security_tag":"low"}, a nastavte hlavičku požadavku tak, aby odesílala customer_id k originu:
export default {
/**
* Fetch and add a X-Customer-Id header to the origin based on hostname
* @param {Request} request
*/
async fetch(request, env, ctx) {
const customer_id = request.cf.hostMetadata.customer_id;
const newHeaders = new Headers(request.headers);
newHeaders.append("X-Customer-Id", customer_id);
const init = {
headers: newHeaders,
method: request.method,
};
return fetch(request.url, init);
},
};export default {
/**
* Fetch and add a X-Customer-Id header to the origin based on hostname
* @param {Request} request
*/
async fetch(request, env, ctx): Promise<Response> {
const customer_id = request.cf.hostMetadata.customer_id;
const newHeaders = new Headers(request.headers);
newHeaders.append("X-Customer-Id", customer_id);
const init = {
headers: newHeaders,
method: request.method,
};
return fetch(request.url, init);
},
} satisfies ExportedHandler<Env>;Přístup k vlastním metadatům ve výrazu pravidla
Použijte cf.hostname.metadata pole pro přístup k objektu metadata ve výrazech pravidel. Různé hodnoty z objektu JSON získáte pomocí lookup_json_string .
Následující výraz pravidla určuje, že ke shodě pravidla dojde, pokud security_tag hodnota ve vlastních metadatech obsahuje hodnotu low:
lookup_json_string(cf.hostname.metadata, "security_tag") eq "low"Osvědčené postupy
- Ujistěte se, že používané schéma JSON zůstává neměnné: změny schématu bez odpovídajících změn Cloudflare Workers mohou weby rozbít, případně se uplatní jakékoli definované „výchozí“ chování
- Preferujte plochou strukturu JSON
- Používejte řetězcové klíče ve stylu snake_case (nikoli camelCase nebo PascalCase)
- Používejte správné booleovské hodnoty (true/false místo
truenebo1nebo0) - Používejte čísla k reprezentaci celých čísel místo řetězců (
1nebo2místo"1"nebo"2") - Definice záložního chování pro případ, že metadata chybí
- Definice záložního chování pro případ, že klíč nebo hodnota v metadatech nejsou známé
Obecně platí, že byste se měli řídit Google's JSON Style guide ↗ kde je to vhodné.
Omezení
Metadata, která lze Cloudflare poskytnout, mají určitá omezení:
- Musí se jednat o platný JSON.
- Jakékoli řešení originu, například směrování požadavků pro daný hostitelský název na konkrétní backend, musí být zadáno jako hostitelský název, který existuje v DNS Cloudflare (a to i pro neautoritativní nastavení). Pokud zadáte přímo IP adresu, požadavky skončí chybou.
- Celková velikost payloadu nesmí přesáhnout 4 KB.
- Vyžaduje to Cloudflare Worker, který umí zpracovat schéma a na základě obsahu spustit příslušnou logiku.
Podpora Terraformu
Terraform umožňuje pouze mapy jednoho typu, takže podpora Terraformu od Cloudflare pro vlastní metadata u vlastních hostitelských názvů je omezena na řetězcové klíče a hodnoty.