Cloudflare (BYOCDN)
Deze configuratie leidt verwerpelijk verkeer (verzoeken van AI bots en gebruikersagenten LLM) aan de Edge Optimize backend dienst (live.edgeoptimize.net). Menselijke bezoekers en SEO-bots worden nog steeds van je herkomst bediend zoals gewoonlijk. Als u de configuratie wilt testen nadat de installatie is voltooid, zoekt u naar de koptekst x-edgeoptimize-request-id in de reactie.
Eerste vereisten
Voordat u de Cloudflare Worker instelt die regels routeert, moet u ervoor zorgen dat:
- Een Cloudflare-account met workers die op uw domein zijn ingeschakeld.
- Toegang tot DNS-instellingen van uw domein in Cloudflare.
- Een Edge Optimize API-sleutel die is opgehaald uit de gebruikersinterface van LLM Optimizer. Voor stappen, zie uw API sleutels terugwinnen.
- (Facultatief) om het opvoeren verpletteren te testen, zie het Opvoeren API sleutel .
hoe het verpletteren van werken
Wanneer correct gevormd, wordt een verzoek aan uw domein (bijvoorbeeld, www.example.com/page.html) van een agentische gebruikersagent onderschept door de Arbeider van de Vormgeving van de Wolk en verpletterd aan het Edge Optimize achtereind. Het achterste verzoek omvat de vereiste kopballen.
het Testen van het achterste eindverzoek
U kunt het verpletteren verifiëren door een direct verzoek aan Edge te richten optimaliseert achtereind.
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;'
Vereiste Kopballen
Bij aanvragen naar de Edge Optimize-backend moeten de volgende headers worden ingesteld:
x-forwarded-hostwww.example.comx-edgeoptimize-url/page.html of /products?id=123x-edgeoptimize-api-keyyour-api-key-herex-edgeoptimize-configLLMCLIENT=TRUE;Opties instellen
Er zijn twee manieren om de Cloudflare Worker voor Edge Optimize in te stellen:
- Optie 1: Stel (geadviseerd) op Cloudflare op — leidt automatisch tot een nieuwe worker en zet u voor de vereiste milieuvariabelen en geheimen ertoe. Gebruik deze optie als u geen bestaande Cloudflare Worker voor dit domein hebt.
- Optie 2: Handmatige opstelling - geleidelijke instructies voor het creëren van en het vormen van de arbeider zelf. Gebruik deze optie als u reeds een bestaande die Worker hebt van de Wolk op uw domein wordt gevormd — u Edge moet samenvoegen optimaliseert code in uw bestaande worker (zie Stap 2: Voeg de code van de Arbeider toe), of als u volledige controle over de plaatsing verkiest.
Ongeacht welke optie u kiest, moet u de worker aan uw domein manueel verbinden — zie Stap: Voeg een route aan uw domein toe.
Optie 1: Distribueren naar cloud
Deze optie gebruikt stelt aan Cloudflare knoop op om de worker automatisch tot stand te brengen en de vereiste milieuvariabelen en geheimen in uw rekening van de Vast te vormen. Dit is de snelste manier om aan de slag te gaan als u een nieuwe worker instelt.
Stap 1: Implementeer de arbeider
Klik op de onderstaande knop om de Edge Optimize-worker te implementeren in uw Cloudflare-account:
Stap 2: Vul de plaatsingsvorm in
Als u op de knop klikt, wordt de instellingspagina van de workers geopend. Vul het formulier als volgt in:
-
de rekening van de Git - selecteer uw rekening GitHub of GitLab van dropdown. Cloudflare forks the worker code into a repository in your account. Als geen rekening vermeld is, kunt u een nieuwe verbinding direct van dropdown toevoegen door + Nieuwe Verbinding GitHub of + Nieuwe Verbinding GitLab te selecteren. Voor meer informatie, zie de de integratiegids van de Git van de Wolk .
-
creeer privé bewaarplaats van het Git — Verlaat dit gecontroleerd (gebrek).
-
de naam van het Project — Verlaat als
edge-optimize-routerof ga een naam van uw keus in. -
EDGE_OPTIMIZE_API_KEY — Deeg uw Adobe-Geleverde sleutel van Edge optimaliseer API. Deze waarde wordt opgeslagen als een versleuteld geheim.
-
EDGE_OPTIMIZE_TARGET_HOST - ga het domein van uw plaats zonder het protocol (bijvoorbeeld,
www.example.com) in. -
bouwt bevel — Laat leeg.
-
stel bevel op - laat als
npm run deploy(vooraf ingevuld). -
bouwt voor niet-productie takken - laat ongecontroleerd. Dit is een ontwikkelaarswerkstroomfunctie en is niet nodig voor deze implementatie.
-
Klik creëren en opstellen.
Nadat de worker wordt opgesteld, ga aan te werk voeg een route aan uw domein toe om de worker met uw domein te verbinden. Het verpletteren wordt niet automatisch gevormd en moet manueel worden voltooid.
Optie 2: Handmatige installatie
Voer de volgende stappen uit om de worker handmatig te maken en te configureren.
Stap 1: Creeer de Worker van de Veldarm
- Meld u aan bij het dashboard Cloudflare.
- Navigeer aan Arbeiders & Pagina’s in sidebar.
- Klik creëren toepassing en dan creëren de Arbeider.
- Geef de worker een naam (bijvoorbeeld
edge-optimize-router). - Klik opstellen om de worker met de standaardcode tot stand te brengen.
Stap 2: Voeg de code van de Arbeider toe
Na het creëren van de arbeider, geeft de klik code uit en vervangt de standaardcode met het volgende. Als u al een bestaande Cloudflakkering hebt, voegt u de onderstaande code samen met de bestaande arbeiderscode in plaats van deze volledig te vervangen.
/**
* 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");
edgeOptimizeHeaders.delete("x-edgeoptimize-fetcher-key"); // Optional (required only in case of WAF)
// 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;");
// edgeOptimizeHeaders.set("x-edgeoptimize-fetcher-key", "<YOUR FETCHER KEY>"); // Optional (required only in case of WAF)
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;
}
Klik sparen en stel op om de worker te publiceren.
Stap 3: Vorm milieuvariabelen en geheimen
Omgevingsvariabelen slaan gevoelige configuratie als de API-sleutel veilig op.
-
In de montages van uw worker, navigeer aan Montages > Variabelen.
-
Onder Variabelen van het Milieu, klik veranderlijke toevoegen.
-
Voeg de volgende variabelen toe:
table 0-row-3 1-row-3 2-row-3 Naam variabele Beschrijving Vereist EDGE_OPTIMIZE_API_KEYDe door Adobe verschafte Edge Optimize API-sleutel. Ja EDGE_OPTIMIZE_TARGET_HOSTDe doelhost voor Edge Optimize-aanvragen (verzonden als x-forwarded-hostheader) en het oorspronkelijke domein voor failover. Dit moet alleen het domein zijn zonder protocol (bijvoorbeeldwww.example.com, niethttps://www.example.com).Ja -
Voor de API sleutel, klik Coderen om het veilig op te slaan.
-
Klik sparen en stel op.
Voeg een route aan uw domein toe add-a-route-to-your-domain
Ongeacht de instellingsoptie die u hebt gebruikt, moet u de worker handmatig koppelen aan uw domein. Deze stap activeert de arbeider op uw verkeer.
- Ga naar de Montages van uw arbeider > Trekkers.
- Onder Routes, klik route toevoegen.
- Voer uw domeinpatroon in (bijvoorbeeld
www.example.com/*ofexample.com/*). - Selecteer de zone in het vervolgkeuzemenu.
- Klik sparen.
Alternatief, kunt u routes op het streekniveau vormen:
- Navigeer naar uw domein in Cloudflare.
- Ga naar Routes van de Arbeiders.
- Klik toevoegen route en specificeer het patroon en de arbeider.
het verifiëren van failovergedrag
Als Edge Optimize niet beschikbaar is of een fout retourneert, mislukt de worker automatisch naar de oorsprong. Voorbeelden van failover-reacties zijn de header x-edgeoptimize-fo :
< HTTP/2 200
< x-edgeoptimize-fo: 1
U kunt de gebeurtenissen van failover in de logboeken van de Werknemers van de Wolk controleren om kwesties problemen op te lossen.
Begrijpend de logica van de Arbeider
De Cloudflare Worker implementeert de volgende logica:
-
{de opsporing van de Agent van 0} Gebruiker:controleert als de de gebruikersagent van het inkomende verzoek om het even welke bepaalde agentic bots (case-insensitive) aanpast.
-
Weg richtend: naar keuze filters verzoeken die op gerichte wegen worden gebaseerd. Standaard worden alle HTML-pagina’s (URL’s die eindigen met
/, geen extensie of.html) gerouteerd. U kunt specifieke paden opgeven met de arrayTARGETED_PATHS. -
bescherming van de Lijn: de
x-edgeoptimize-requestkopbal verhindert oneindige lijnen. Wanneer Edge Optimize aanvragen terugstuurt naar uw oorsprong, wordt deze header ingesteld op"1"en geeft de worker de aanvraag door zonder deze terug te sturen naar Edge Optimize. -
veiligheid van de Kopbal: alvorens Edge te plaatsen optimaliseert kopballen, verwijdert de worker om het even welke bestaande
x-edgeoptimize-*kopballen van het inkomende verzoek om de aanvallen van de kopbalinjectie te verhinderen. -
afbeelding van de Kopbal: de arbeider plaatst de vereiste kopballen voor Edge optimaliseren:
x-forwarded-host- Identificeert het oorspronkelijke sitedomein.x-edgeoptimize-url- Behoudt het oorspronkelijke aanvraagpad en de oorspronkelijke queryreeks.x-edgeoptimize-api-key- Hiermee wordt de aanvraag geverifieerd met Edge Optimize.x-edgeoptimize-config- Biedt een configuratie voor de cachemleutel.
-
logica Failover: als Edge optimaliseert om het even welke code van de foutenstatus terugkeert (4XX cliëntfouten of 5XX serverfouten) of het verzoek wegens een netwerkfout ontbreekt, ontbreekt de worker automatisch over aan uw oorsprong gebruikend
EDGE_OPTIMIZE_TARGET_HOST. De failoverreactie omvatx-edgeoptimize-fo: 1kopbal om erop te wijzen dat failover voorkwam. -
Redirect behandeling: de
redirect: "manual"optie zorgt ervoor dat de omleidingsreacties van Edge optimaliseren door aan de cliënt zonder de worker worden overgegaan die hen volgt.
het Aanpassen van de configuratie
U kunt het arbeidersgedrag aanpassen door de configuratieconstanten bij de bovenkant van de code te wijzigen:
Agentic bot list
Wijzig de array AGENTIC_BOTS om gebruikersagents toe te voegen of te verwijderen:
const AGENTIC_BOTS = [
'AdobeEdgeOptimize-AI',
'ChatGPT-User',
'GPTBot',
'OAI-SearchBot',
'PerplexityBot',
'Perplexity-User',
// Add additional user agents as needed
'ClaudeBot',
'Anthropic-AI'
];
gerichte wegen
Standaard worden alle HTML-pagina’s gerouteerd naar Edge Optimize. Als u het routeren wilt beperken tot specifieke paden, wijzigt u de array TARGETED_PATHS :
// Route all HTML pages (default)
const TARGETED_PATHS = null;
// Or specify exact paths to route
const TARGETED_PATHS = ['/', '/page.html', '/products', '/about-us'];
configuratie Failover
Standaard mislukt de worker op een 4XX- of 5XX-fout in Edge Optimize. Pas dit gedrag aan:
// 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;
Belangrijke overwegingen
-
gedrag Failover: De worker ontbreekt automatisch over aan uw oorsprong als Edge optimaliseert om het even welke fout (4XX of 5XX statuscodes) terugkeert of als het verzoek wegens een netwerkfout ontbreekt. Failover gebruikt
EDGE_OPTIMIZE_TARGET_HOSTals het oorspronkelijke domein (vergelijkbaar met hetF_Default_Originof CloudFrontDefault_Originvan Fastly). De antwoorden van Failover omvatten dex-edgeoptimize-fo: 1kopbal, die u voor controle en het zuiveren kunt gebruiken. -
Caching: de geheime voorgeheugenreacties van de Wolk die op URL door gebrek worden gebaseerd. Omdat het agentische verkeer verschillende inhoud dan menselijk verkeer ontvangt, zorg uw rekeningen van de geheim voorgeheugenconfiguratie voor dit voor. U kunt de cache-API of cachekoppen gebruiken om de cacheinhoud te onderscheiden. De header
x-edgeoptimize-configmoet in de cachemoets worden opgenomen. -
het Beperken van het Tarief: monitor uw Edge optimaliseert gebruik en overweegt het uitvoeren van tarief dat voor agentic verkeer indien nodig beperkt.
-
het Testen: test altijd de configuratie in een het opvoeren milieu alvorens aan productie op te stellen. Verifieer dat zowel agentisch als menselijk verkeer zich zoals verwacht gedragen. Het gedrag van de failover van de test door Edge te simuleren optimaliseert fouten.
-
Logging: laat het registreren van de Werknemers van de Wolk toe Cloudflare om verzoeken te controleren en kwesties problemen op te lossen. Navigeer aan Arbeiders > uw arbeider > Logboeken om logboeken in real time te bekijken. De worker registreert failover-gebeurtenissen voor foutopsporingsdoeleinden.
Problemen oplossen
x-edgeoptimize-request-id header in reactieAGENTIC_BOTS bevindt.EDGE_OPTIMIZE_API_KEY correct is ingesteld in omgevingsvariabelen en geheimen. Neem contact op met Adobe om te bevestigen dat uw API-sleutel actief is.x-edgeoptimize-request -headercontrole is uitgevoerd.TARGETED_PATHS correct is geconfigureerd.x-edgeoptimize-fo: 1 header in reactieFAILOVER_ON_4XX en FAILOVER_ON_5XX worden ingesteld op true . Controleren of workers zich aanmelden voor foutberichten.TARGETED_PATHS (indien opgegeven) bevindt en of het overeenkomt met het HTML-pagina regex-patroon.EDGE_OPTIMIZE_TARGET_HOST bevat een protocol (bijvoorbeeld https:// ).example.com en niet https://example.com ).staat Optimize bij Edge door (facultatieve) firewallregels toe
Als uw CDN een WAF- of botbeheer gebruikt:
-
Lijst van gewenste personen de gebruikersagent van
*AdobeEdgeOptimize/1.0*in uw WAF of Bot Manager zodat optimaliseren bij de dienst van Edge uw oorsprongsinhoud kan halen. -
Als uw firewall naast gebruikersagent aanvullende verificatie vereist, genereert u een geheim (bijvoorbeeld
openssl rand -hex 32) en:- Voeg
x-edgeoptimize-fetcher-keymet het geheim in uw verpletterende regels naast de anderex-edgeoptimize-*kopballen toe. - Voeg een WAF- of Bot Manager-regel toe om aanvragen toe te staan waarbij
x-edgeoptimize-fetcher-keyovereenkomt met hetzelfde geheim.
- Voeg
-
Optimaliseren in Edge forwards deze header ‘as-is’ - je hebt de volledige levenscyclus van sleutels.
verifieer de opstelling
Na de voltooiing van de opstelling, verifieer dat beide verkeer aan Edge Optimize wordt verpletterd en dat het menselijke verkeer onaangetast blijft.
1. Het verkeer van de Bot van de test (zou moeten worden geoptimaliseerd)
Simuleer een AI bot request using an agentic user-agent:
curl -svo /dev/null https://www.example.com/page.html \
--header "user-agent: chatgpt-user"
Een succesvol antwoord bevat de header x-edgeoptimize-request-id , waarmee wordt bevestigd dat het verzoek is gerouteerd via Edge Optimize:
< HTTP/2 200
< x-edgeoptimize-request-id: 50fce12d-0519-4fc6-af78-d928785c1b85
2. Het menselijke verkeer van de test (zou NIET moeten worden beïnvloed)
Simuleer een regelmatig verzoek van een menselijke browser:
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"
De reactie zou niet x-edgeoptimize-request-id kopbal moeten bevatten. De pagina-inhoud en de reactietijd moeten gelijk blijven aan voordat u Optimaliseren in Edge inschakelt.
3. Hoe te tussen de twee scenario’s te onderscheiden
x-edgeoptimize-request-idx-edgeoptimize-fo1)De status van het verkeer dat verplettert kan ook in LLM Optimizer UI worden gecontroleerd. Navigeer aan configuratie van de Klant en selecteer de CDN configuratie tabel.
Meer leren over Optimaliseren bij Edge, met inbegrip van beschikbare kansen, auto-optimaliseringswerkschema’s, en FAQs, terugkeer aan optimaliseren bij het overzicht van Edge .