Cloudflare (BYOCDN)
Den här konfigurationen dirigerar agens-trafik (begäranden från AI-bots och LLM-användaragenter) till Edge Optimize-backend-tjänsten (live.edgeoptimize.net). Besökare på människor och SEO-botar fortsätter att betjänas som vanligt utifrån ditt ursprung. Om du vill testa konfigurationen söker du efter rubriken x-edgeoptimize-request-id i svaret när konfigurationen är klar.
Förutsättningar
Innan du konfigurerar Cloudflare Worker-routningsreglerna måste du se till att du har:
- Ett CloudFlare-konto med arbetare aktiverade på din domän.
- Åtkomst till domänens DNS-inställningar i CloudFlare.
- LLM Optimizer introduktionsprocess har slutförts.
- CDN-loggen har vidarebefordrats till LLM Optimizer.
- En Edge Optimize API-nyckel har hämtats från LLM Optimizer användargränssnitt.
Steg för att hämta API-nyckeln:
-
Navigera till Kundkonfiguration och välj fliken CDN-konfiguration .
-
Markera kryssrutan Distribuera optimeringar till AI-agenter under AI-trafikroutning för att distribuera optimeringar.
-
Kopiera API-nyckeln och fortsätt med stegen för routningskonfiguration nedan.
note note NOTE I det här skedet kan statusen visa ett rött kryss som anger att installationen inte har slutförts än. Detta förväntas - när du har slutfört routningskonfigurationen nedan och AI-robottrafiken börjar flöda uppdateras statusen till en grön bock som bekräftar att routning har aktiverats.
Om du behöver hjälp med ovanstående steg kontaktar du ditt Adobe-kontoteam eller llmo-at-edge@adobe.com.
Så här fungerar routning
När den är korrekt konfigurerad fångas en begäran till din domän (till exempel www.example.com/page.html) från en autentisk användaragent upp av Cloudflare Worker och dirigeras till Edge Optimize-backend. Backend-begäran innehåller de huvuden som krävs.
Testar backend-begäran
Du kan verifiera routningen genom att göra en direkt begäran till Edge Optimize-backend.
curl -svo /dev/null https://live.edgeoptimize.net/page.html \
-H 'x-forwarded-host: www.example.com' \
-H 'x-edgeoptimize-url: /page.html' \
-H 'x-edgeoptimize-api-key: $EDGE_OPTIMIZE_API_KEY' \
-H 'x-edgeoptimize-config: LLMCLIENT=TRUE;'
Obligatoriska rubriker
Följande huvuden måste anges på begäranden till Edge Optimize-backend:
x-forwarded-hostwww.example.comx-edgeoptimize-url/page.html eller /products?id=123x-edgeoptimize-api-keyyour-api-key-herex-edgeoptimize-configLLMCLIENT=TRUE;Steg 1: Skapa molnarbetare
- Logga in på din Cloudflare-kontrollpanel.
- Navigera till Arbetare och sidor i sidlisten.
- Klicka på Skapa program och sedan på Skapa arbetare.
- Namnge din arbetare (till exempel
edge-optimize-router). - Klicka på Distribuera för att skapa arbetaren med standardkoden.
Steg 2: Lägg till arbetarkoden
När du har skapat arbetaren klickar du på Redigera kod och ersätter standardkoden med följande:
/**
* Edge Optimize BYOCDN - Cloudflare Worker
*
* This worker routes requests from agentic bots (AI/LLM user agents) to the
* Edge Optimize backend service for optimized content delivery.
*
* Features:
* - Routes agentic bot traffic to Edge Optimize backend
* - Failover to origin on Edge Optimize errors (any 4XX or 5XX errors)
* - Loop protection to prevent infinite redirects
* - Human visitors and SEO bots are served from the origin as usual
*/
// List of agentic bot user agents to route to Edge Optimize
const AGENTIC_BOTS = [
'AdobeEdgeOptimize-AI',
'ChatGPT-User',
'GPTBot',
'OAI-SearchBot',
'PerplexityBot',
'Perplexity-User'
];
// Targeted paths for Edge Optimize routing
// Set to null to route all HTML pages, or specify an array of paths
const TARGETED_PATHS = null; // e.g., ['/', '/page.html', '/products']
// Failover configuration
// Failover on any 4XX client error or 5XX server error from Edge Optimize
const FAILOVER_ON_4XX = true; // Failover on any 4XX error (400-499)
const FAILOVER_ON_5XX = true; // Failover on any 5XX error (500-599)
export default {
async fetch(request, env, ctx) {
return await handleRequest(request, env, ctx);
},
};
async function handleRequest(request, env, ctx) {
const url = new URL(request.url);
const userAgent = request.headers.get("user-agent")?.toLowerCase() || "";
// Check if request is already processed (loop protection)
const isEdgeOptimizeRequest = !!request.headers.get("x-edgeoptimize-request");
// Construct the original path and query string
const pathAndQuery = `${url.pathname}${url.search}`;
// Check if the path matches HTML pages (no extension or .html extension)
const isHtmlPage = /(?:\/[^./]+|\.html|\/)$/.test(url.pathname);
// Check if path is in targeted paths (if specified)
const isTargetedPath = TARGETED_PATHS === null
? isHtmlPage
: (isHtmlPage && TARGETED_PATHS.includes(url.pathname));
// Check if user agent is an agentic bot
const isAgenticBot = AGENTIC_BOTS.some((ua) => userAgent.includes(ua.toLowerCase()));
// Route to Edge Optimize if:
// 1. Request is NOT already from Edge Optimize (prevents infinite loops)
// 2. User agent matches one of the agentic bots
// 3. Path is targeted for optimization
if (!isEdgeOptimizeRequest && isAgenticBot && isTargetedPath) {
// Build the Edge Optimize request URL
const edgeOptimizeURL = `https://live.edgeoptimize.net${pathAndQuery}`;
// Clone and modify headers for the Edge Optimize request
const edgeOptimizeHeaders = new Headers(request.headers);
// Remove any existing Edge Optimize headers for security
edgeOptimizeHeaders.delete("x-edgeoptimize-api-key");
edgeOptimizeHeaders.delete("x-edgeoptimize-url");
edgeOptimizeHeaders.delete("x-edgeoptimize-config");
// x-forwarded-host: The original site domain
// Use environment variable if set, otherwise use the request host
edgeOptimizeHeaders.set("x-forwarded-host", env.EDGE_OPTIMIZE_TARGET_HOST ?? url.host);
// x-edgeoptimize-api-key: Your Adobe-provided API key
edgeOptimizeHeaders.set("x-edgeoptimize-api-key", env.EDGE_OPTIMIZE_API_KEY);
// x-edgeoptimize-url: The original request URL path and query
edgeOptimizeHeaders.set("x-edgeoptimize-url", pathAndQuery);
// x-edgeoptimize-config: Configuration for cache key differentiation
edgeOptimizeHeaders.set("x-edgeoptimize-config", "LLMCLIENT=TRUE;");
try {
// Send request to Edge Optimize backend
const edgeOptimizeResponse = await fetch(new Request(edgeOptimizeURL, {
headers: edgeOptimizeHeaders,
redirect: "manual", // Preserve redirect responses from Edge Optimize
}), {
cf: {
cacheEverything: true, // Enable caching based on origin's cache-control headers
},
});
// Check if we need to failover to origin
const status = edgeOptimizeResponse.status;
const is4xxError = FAILOVER_ON_4XX && status >= 400 && status < 500;
const is5xxError = FAILOVER_ON_5XX && status >= 500 && status < 600;
if (is4xxError || is5xxError) {
console.log(`Edge Optimize returned ${status}, failing over to origin`);
return await failoverToOrigin(request, env, url);
}
// Return the Edge Optimize response
return edgeOptimizeResponse;
} catch (error) {
// Network error or timeout - failover to origin
console.log(`Edge Optimize request failed: ${error.message}, failing over to origin`);
return await failoverToOrigin(request, env, url);
}
}
// For all other requests (human users, SEO bots), pass through unchanged
return fetch(request);
}
/**
* Failover to origin server when Edge Optimize returns an error
* @param {Request} request - The original request
* @param {Object} env - Environment variables
* @param {URL} url - Parsed URL object
*/
async function failoverToOrigin(request, env, url) {
// Build origin URL
const originURL = `${url.protocol}//${env.EDGE_OPTIMIZE_TARGET_HOST}${url.pathname}${url.search}`;
// Prepare headers - clean Edge Optimize headers and add loop protection
const originHeaders = new Headers(request.headers);
originHeaders.set("Host", env.EDGE_OPTIMIZE_TARGET_HOST);
originHeaders.delete("x-edgeoptimize-api-key");
originHeaders.delete("x-edgeoptimize-url");
originHeaders.delete("x-edgeoptimize-config");
originHeaders.delete("x-forwarded-host");
originHeaders.set("x-edgeoptimize-request", "fo");
// Create and send origin request
const originRequest = new Request(originURL, {
method: request.method,
headers: originHeaders,
body: request.body,
redirect: "manual",
});
const originResponse = await fetch(originRequest);
// Add failover marker header to response
const modifiedResponse = new Response(originResponse.body, {
status: originResponse.status,
statusText: originResponse.statusText,
headers: originResponse.headers,
});
modifiedResponse.headers.set("x-edgeoptimize-fo", "1");
return modifiedResponse;
}
Klicka på Spara och distribuera för att publicera arbetaren.
Steg 3: Konfigurera miljövariabler
Miljövariabler lagrar känslig konfiguration som din API-nyckel säkert.
-
Navigera till Inställningar > Variabler i arbetarens inställningar.
-
Klicka på Lägg till variabel under Miljövariabler.
-
Lägg till följande variabler:
table 0-row-3 1-row-3 2-row-3 Variabelnamn Beskrivning Obligatoriskt EDGE_OPTIMIZE_API_KEYDin Adobe-medföljande Edge Optimize API-nyckel. Ja EDGE_OPTIMIZE_TARGET_HOSTMålvärden för Edge Optimize-begäranden (skickas som x-forwarded-host-huvud) och ursprungsdomänen för redundans. Måste vara domänen utan protokoll (till exempelwww.example.com, intehttps://www.example.com).Ja -
För API-nyckeln klickar du på Kryptera för att lagra den säkert.
-
Klicka på Spara och distribuera.
Steg 4: Lägg till en väg till din domän
Så här aktiverar du arbetaren på din domän:
- Gå till din arbetares inställningar > Utlösare.
- Klicka på Lägg till flöde under Routningar.
- Ange ditt domänmönster (till exempel
www.example.com/*ellerexample.com/*). - Välj din zon i listrutan.
- Klicka på Spara.
Du kan också konfigurera vägar på zonnivå:
- Navigera till din domän i Cloudflare.
- Gå till Arbetsvägar.
- Klicka på Lägg till flöde och ange mönster och arbetare.
Verifierar failover-beteende
Om Edge Optimize inte är tillgängligt eller returnerar ett fel, kommer arbetaren automatiskt att gå över till ditt ursprung. Redundanssvar innehåller rubriken x-edgeoptimize-fo:
< HTTP/2 200
< x-edgeoptimize-fo: 1
Du kan övervaka failover-händelser i loggar för Cloudflare-arbetare för att felsöka problem.
Förstå arbetslogiken
Cloudflare Worker implementerar följande logik:
-
Identifiering av användaragent: Kontrollerar om användaragenten för den inkommande begäran matchar någon av de definierade officiella boten (skiftlägesokänslig).
-
Sökvägsmål: Du kan också filtrera begäranden baserat på målsökvägar. Som standard dirigeras alla HTML-sidor (URL:er som slutar med
/, inget tillägg eller.html). Du kan ange specifika sökvägar med arrayenTARGETED_PATHS. -
Loopskydd: Rubriken
x-edgeoptimize-requestförhindrar oändliga loopar. När Edge Optimize skickar tillbaka begäranden till ditt ursprung anges rubriken till"1", och arbetaren skickar begäran genom begäran utan att vidarebefordra den till Edge Optimize. -
Huvudsäkerhet: Innan du anger Edge Optimize-huvuden tar arbetaren bort alla befintliga
x-edgeoptimize-*huvuden från den inkommande begäran för att förhindra huvudinmatningsattacker. -
Mappning av sidhuvud: Arbetaren anger de sidhuvuden som krävs för Edge Optimize:
x-forwarded-host- Identifierar den ursprungliga webbplatsdomänen.x-edgeoptimize-url- Bevarar den ursprungliga sökvägen och frågesträngen för begäran.x-edgeoptimize-api-key- Autentiserar begäran med Edge Optimize.x-edgeoptimize-config- Tillhandahåller cachenyckelkonfiguration.
-
Redundanslogik: Om Edge Optimize returnerar en felstatuskod (4XX klientfel eller 5XX serverfel) eller om begäran misslyckas på grund av ett nätverksfel, misslyckas arbetaren automatiskt över till ditt ursprung med
EDGE_OPTIMIZE_TARGET_HOST. Redundanssvaret innehåller rubrikenx-edgeoptimize-fo: 1som anger att redundans inträffade. -
Omdirigeringshantering: Med alternativet
redirect: "manual"ser du till att omdirigeringssvar från Edge Optimize skickas till klienten utan att arbetaren följer dem.
Anpassa konfigurationen
Du kan anpassa arbetsbeteendet genom att ändra konfigurationskonstanterna högst upp i koden:
Agentrobotlista
Ändra AGENTIC_BOTS-arrayen för att lägga till eller ta bort användaragenter:
const AGENTIC_BOTS = [
'AdobeEdgeOptimize-AI',
'ChatGPT-User',
'GPTBot',
'OAI-SearchBot',
'PerplexityBot',
'Perplexity-User',
// Add additional user agents as needed
'ClaudeBot',
'Anthropic-AI'
];
Målsökvägar
Som standard dirigeras alla HTML-sidor till Edge Optimize. Om du vill begränsa routning till specifika sökvägar ändrar du TARGETED_PATHS-arrayen:
// Route all HTML pages (default)
const TARGETED_PATHS = null;
// Or specify exact paths to route
const TARGETED_PATHS = ['/', '/page.html', '/products', '/about-us'];
Konfiguration för växling vid fel
Som standard misslyckas arbetaren med alla 4XX- eller 5XX-fel från Edge Optimize. Anpassa detta beteende:
// Default: failover on any 4XX or 5XX error
const FAILOVER_ON_4XX = true;
const FAILOVER_ON_5XX = true;
// Failover only on 5XX server errors (not 4XX client errors)
const FAILOVER_ON_4XX = false;
const FAILOVER_ON_5XX = true;
// Disable automatic failover (not recommended)
const FAILOVER_ON_4XX = false;
const FAILOVER_ON_5XX = false;
Viktiga överväganden
-
Redundansbeteende: Arbetaren övergår automatiskt till ditt ursprung om Edge Optimize returnerar ett fel (4XX- eller 5XX-statuskoder) eller om begäran misslyckas på grund av ett nätverksfel. Redundans använder
EDGE_OPTIMIZE_TARGET_HOSTsom ursprungsdomän (liknande FastlyF_Default_Origineller CloudFrontDefault_Origin). Redundanssvar innehåller rubrikenx-edgeoptimize-fo: 1som du kan använda för övervakning och felsökning. -
Cachelagring: Cloudflare cachelagrar svar baserat på URL-adressen som standard. Eftersom agens trafik tar emot annat innehåll än mänsklig trafik bör du kontrollera dina cachekonfigurationskonton för detta. Använd cache-API eller cacherubriker för att differentiera cachelagrat innehåll. Rubriken
x-edgeoptimize-configska inkluderas i cachenyckeln. -
Hastighetsbegränsning: Övervaka din Edge Optimera-användning och överväg att implementera hastighetsbegränsning för autentisk trafik om det behövs.
-
Testar: Testa alltid konfigurationen i en staging-miljö innan du distribuerar till produktion. Verifiera att både den autentiska och den mänskliga trafiken beter sig som förväntat. Testa failover-beteendet genom att simulera Edge Optimize-fel.
-
Loggning: Aktivera loggning av Cloudflare-arbetare för att övervaka förfrågningar och felsöka problem. Navigera till Arbetare > din arbetare > Loggar om du vill visa realtidsloggar. Arbetaren loggar redundanshändelser i felsökningssyfte.
Felsökning
x-edgeoptimize-request-id-huvud i svaretAGENTIC_BOTS-arrayen.EDGE_OPTIMIZE_API_KEY har angetts korrekt i miljövariabler. Kontakta Adobe för att bekräfta att API-nyckeln är aktiv.x-edgeoptimize-request är på plats.TARGETED_PATHS har konfigurerats korrekt.x-edgeoptimize-fo: 1-huvud i svarFAILOVER_ON_4XX och FAILOVER_ON_5XX är inställda på true. Sök efter felmeddelanden i arbetarloggarna.TARGETED_PATHS (om den anges) och matchar HTML sidans regex-mönster.EDGE_OPTIMIZE_TARGET_HOST innehåller protokoll (till exempel https://).example.com, inte https://example.com).Verifiera installationen
När installationen är klar kontrollerar du att både trafik dirigeras till Edge Optimize och att mänsklig trafik inte påverkas.
1. Testa starttrafik (bör optimeras)
Simulera en AI-robotbegäran med en agentisk användaragent:
curl -svo /dev/null https://www.example.com/page.html \
--header "user-agent: chatgpt-user"
Ett svar innehåller rubriken x-edgeoptimize-request-id som bekräftar att begäran har vidarebefordrats via Edge Optimize:
< HTTP/2 200
< x-edgeoptimize-request-id: 50fce12d-0519-4fc6-af78-d928785c1b85
2. Testa mänsklig trafik (bör INTE påverkas)
Simulera en vanlig webbläsarbegäran:
curl -svo /dev/null https://www.example.com/page.html \
--header "user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
Svaret ska inte innehålla rubriken x-edgeoptimize-request-id. Sidinnehållet och svarstiden ska vara identiska med innan Optimera aktiveras på Edge.
3. Så här skiljer du mellan de två scenarierna
x-edgeoptimize-request-idx-edgeoptimize-fo1)Status för trafikroutningen kan också kontrolleras i LLM Optimizer-gränssnittet. Navigera till Kundkonfiguration och välj fliken CDN-konfiguration .
Om du vill veta mer om Optimera på Edge, inklusive tillgängliga möjligheter, automatiska optimeringsarbetsflöden och vanliga frågor och svar, går du tillbaka till Optimera på Edge-översikt.