Cloudflare (BYOCDN)
Questa configurazione indirizza il traffico da IA agentica (richieste da bot IA e da agenti utente LLM) al servizio back-end Edge Optimize (live.edgeoptimize.net). Le persone e i bot SEO continuano a ricevere come al solito i contenuti trasmessi dalla tua origine. Per testare la configurazione, al termine cerca nella risposta l’intestazione x-edgeoptimize-request-id.
Prerequisiti
Prima configurare le regole di indirizzamento di un processo di lavoro Cloudflare, assicurati di:
- disporre di un account Cloudflare con processi di lavoro abilitati nel tuo dominio.
- avere acceso alle impostazioni DNS del tuo dominio in Cloudflare.
- aver recuperato una chiave API di ottimizzazione edge dall’interfaccia di LLM Optimizer. Per i passaggi, consulta Recuperare le chiavi API.
- (Facoltativo) Per verificare il routing dell’area di gestione temporanea, vedere Chiave API di gestione temporanea.
Come funziona l’indirizzamento
Una volta configurata correttamente, una richiesta al tuo dominio (ad esempio, www.example.com/page.html) proveniente da un agente utente agentico viene intercettata dal processo di lavoro Cloudflare e indirizzata al back-end del servizio Edge Optimize. La richiesta al back-end include le intestazioni necessarie.
Test della richiesta al back-end
Puoi verificare l’indirizzamento effettuando una richiesta diretta al back-end del servizio Edge Optimize.
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;'
Intestazioni necessarie
Le seguenti intestazioni devono essere impostate sulle richieste al back-end del servizio Edge Optimize:
x-forwarded-hostwww.example.comx-edgeoptimize-url/page.html oppure /products?id=123x-edgeoptimize-api-keyyour-api-key-herex-edgeoptimize-configLLMCLIENT=TRUE;Opzioni di configurazione
Sono disponibili due modi per impostare Cloud Worker per Edge Optimize:
- Opzione 1: distribuisci su Cloudflare (scelta consigliata): crea automaticamente un nuovo processo di lavoro e richiede di specificare le variabili di ambiente e i segreti richiesti. Utilizzare questa opzione se per questo dominio non è disponibile un Cloud Worker esistente.
- Opzione 2: installazione manuale: istruzioni dettagliate per la creazione e la configurazione del worker. Utilizzare questa opzione se nel dominio è già configurato un lavoro Cloudflare Worker. Sarà necessario unire il codice Edge Optimize nel processo di lavoro esistente (vedere Passaggio 2: aggiungere il codice di lavoro) oppure se si preferisce il controllo completo sulla distribuzione.
Indipendentemente dall’opzione scelta, è necessario collegare manualmente il processo di lavoro al dominio. Vedere Passaggio: aggiunta di una route al dominio.
Opzione 1: implementazione in Cloud Flare
Questa opzione utilizza il pulsante Distribuisci su Cloudflare per creare automaticamente il processo di lavoro e configurare le variabili di ambiente e i segreti richiesti nell’account Cloudflare. Questo è il modo più rapido per iniziare se si sta configurando un nuovo lavoratore.
Passaggio 1: distribuire il lavoratore
Fai clic sul pulsante seguente per distribuire il processo di lavoro Edge Optimize all’account Cloudflare:
Passaggio 2: compilare il modulo di distribuzione
Facendo clic sul pulsante si apre la pagina di impostazione dei processi di lavoro. Compila il modulo come segue:
-
Account Git - Seleziona l’account GitHub o GitLab dal menu a discesa. Cloudflare effettua il forking del codice del processo di lavoro in un archivio nel tuo account. Se nessun account è elencato, è possibile aggiungere una nuova connessione direttamente dal menu a discesa selezionando + Nuova connessione GitHub o + Nuova connessione GitLab. Per ulteriori informazioni, vedere la Guida all’integrazione di Git Cloudflare.
-
Crea archivio Git privato. Lasciare selezionata questa opzione (impostazione predefinita).
-
Nome progetto - Lasciare
edge-optimize-routero immettere un nome a scelta. -
EDGE_OPTIMIZE_API_KEY — Incolla la chiave API Edge Optimize fornita da Adobe. Questo valore viene archiviato come segreto crittografato.
-
EDGE_OPTIMIZE_TARGET_HOST - Immettere il dominio del sito senza il protocollo, ad esempio
www.example.com. -
Comando di compilazione. Lasciare vuoto.
-
Distribuisci comando — Lascia come
npm run deploy(precompilato). -
Build per rami non di produzione - Lascia deselezionata. Questa è una funzione del flusso di lavoro per sviluppatori e non è necessaria per questa distribuzione.
-
Fare clic su Crea e distribuisci.
Dopo aver distribuito il processo di lavoro, passare a Aggiungere una route al dominio per collegare il processo di lavoro al dominio. Il routing non viene configurato automaticamente e deve essere completato manualmente.
Opzione 2: configurazione manuale
Per creare e configurare manualmente il processo di lavoro, eseguire la procedura seguente.
Passaggio 1: creare il processo di lavoro Cloudflare
- Accedi alla dashboard di Cloudflare.
- Passa a Workers & Pages (Processi di lavoro e pagine) nella barra laterale.
- Fai clic su Create application (Crea applicazione), quindi su Create Worker (Crea processo di lavoro).
- Assegna un nome al processo di lavoro, ad esempio
edge-optimize-router. - Fai clic su Deploy (Implementa) per creare il processo di lavoro con il codice predefinito.
Passaggio 2: aggiungere il codice del processo di lavoro
Dopo aver creato il processo di lavoro, fare clic su Modifica codice e sostituire il codice predefinito con il seguente. Se disponi già di un lavoro Cloudflare, unisci il codice seguente con il codice del lavoro esistente invece di sostituirlo completamente.
/**
* 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;
}
Fai clic su Save and deploy (Salva e implementa) per pubblicare il processo di lavoro.
Passaggio 3: configurare variabili di ambiente e segreti
Le variabili di ambiente memorizzano in modo sicuro le configurazioni sensibili, come la chiave API.
-
Nelle impostazioni del processo di lavoro, passa a Settings > Variables (Impostazioni > Variabili).
-
In Environment Variables (Variabili ambiente), fai clic su Add variable (Aggiungi variabile).
-
Aggiungi le seguenti variabili:
table 0-row-3 1-row-3 2-row-3 Nome della variabile Descrizione Obbligatorio EDGE_OPTIMIZE_API_KEYChiave API del servizio Edge Optimize fornita da Adobe. Sì EDGE_OPTIMIZE_TARGET_HOSTHost target per le richieste al servizio Edge Optimize (inviate come intestazione x-forwarded-host) e il dominio di origine per il failover. Deve essere solo il dominio, senza protocollo (ad esempio:www.example.com, e nonhttps://www.example.com).Sì -
Per la chiave API, fai clic su Encrypt (Crittografa) per memorizzarla in modo sicuro.
-
Fai clic su Save and deploy (Salva e implementa).
Aggiungere una route al dominio add-a-route-to-your-domain
Indipendentemente dall’opzione di configurazione utilizzata, è necessario collegare manualmente il worker al dominio. Questo passaggio attiva il lavoratore nel traffico.
- Per il tuo processo di lavoro, passa a Settings > Triggers (Impostazioni > Trigger).
- In Routes (Indirizzamenti), fai clic su Add route (Aggiungi indirizzamento).
- Inserisci il pattern del tuo dominio, ad esempio
www.example.com/*oexample.com/*. - Seleziona la zona dal menu a discesa.
- Fai clic su Salva.
In alternativa, puoi configurare gli indirizzamenti a livello di zona:
- Passa al tuo dominio in Cloudflare.
- Passa a Workers Routes (Indirizzamenti dei processi di lavoro).
- Fai clic su Add route (Aggiungi indirizzamento) e specifica il pattern e il processo di lavoro.
Verifica del comportamento di failover
Se il servizio Edge Optimize non è disponibile o restituisce un errore, il processo di lavoro esegue automaticamente il failover sulla tua origine. Le risposte di failover includono l’intestazione x-edgeoptimize-fo:
< HTTP/2 200
< x-edgeoptimize-fo: 1
Per la risoluzione di eventuali problemi, puoi monitorare gli eventi di failover nei registri dei processi di lavoro di Cloudflare.
Logica del processo di lavoro
Il processo di lavoro Cloudflare implementa la logica seguente:
-
Rilevamento dell’agente utente: verifica se l’agente utente della richiesta in ingresso corrisponde a uno dei bot agentici definiti, senza distinzione maiuscole/minuscole.
-
Targeting del percorso: facoltativamente, filtra le richieste in base ai percorsi di destinazione. Per impostazione predefinita, vengono indirizzate tutte le pagine HTML (URL che terminano con
/, nessuna estensione o.html). Per percorsi specifici, puoi utilizzare l’arrayTARGETED_PATHS. -
Protezione da cicli infiniti: l’intestazione
x-edgeoptimize-requestimpedisce cicli infiniti. Quando il servizio Edge Optimize invia richieste alla tua origine, questa intestazione viene impostata su"1"e il processo di lavoro trasmette la richiesta senza indirizzarla nuovamente al servizio Edge Optimize. -
Sicurezza delle intestazioni: prima di impostare le intestazioni del servizio Edge Optimize, il processo di lavoro rimuove le intestazioni
x-edgeoptimize-*esistenti dalla richiesta in ingresso per evitare attacchi di inserimento di intestazioni. -
Mappatura delle intestazione: il processo di lavoro imposta le intestazioni necessarie per Edge Optimize:
x-forwarded-host- Identifica il dominio del sito originale.x-edgeoptimize-url- Mantiene il percorso della richiesta originale e la stringa di query.x-edgeoptimize-api-key- Autentica la richiesta con il servizio Edge Optimize.x-edgeoptimize-config- Fornisce la configurazione delle chiavi nella cache.
-
Logica di failover: se il servizio Edge Optimize restituisce un codice di stato di errore (errori client 4XX o errori server 5XX) o la richiesta non riesce a causa di un errore di rete, il processo di lavoro esegue automaticamente il failover sulla tua origine utilizzando
EDGE_OPTIMIZE_TARGET_HOST. La risposta di failover include l’intestazionex-edgeoptimize-fo: 1per indicare che si tratta di failover. -
Gestione del reindirizzamento: l’opzione
redirect: "manual"fa sì che le risposte di reindirizzamento dal servizio Edge Optimize vengano trasmesse al client senza che il processo di lavoro le segua.
Personalizzazione della configurazione
Puoi personalizzare il comportamento del processo di lavoro modificando le costanti di configurazione all’inizio del codice:
Elenco dei bot agentici
Modifica l’array AGENTIC_BOTS per aggiungere o rimuovere agenti utente:
const AGENTIC_BOTS = [
'AdobeEdgeOptimize-AI',
'ChatGPT-User',
'GPTBot',
'OAI-SearchBot',
'PerplexityBot',
'Perplexity-User',
// Add additional user agents as needed
'ClaudeBot',
'Anthropic-AI'
];
Percorsi di destinazione
Per impostazione predefinita, tutte le pagine HTML vengono indirizzate al servizio Edge Optimize. Per limitare l’indirizzamento a percorsi specifici, modifica l’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'];
Cofigurazione del failover
Per impostazione predefinita, il processo di lavoro esegue il failover in caso di errori 4XX o 5XX dal servizio Edge Optimize. Personalizza questo comportamento:
// 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;
Considerazioni importanti
-
Comportamento di failover: se il servizio Edge Optimize restituisce un errore (con codici di stato 4XX o 5XX) o se la richiesta non riesce a causa di un errore di rete, il processo di lavoro esegue automaticamente il failover sull’origine. Il failover utilizza
EDGE_OPTIMIZE_TARGET_HOSTcome dominio di origine, simile aF_Default_Origindi Fastly oDefault_Origindi CloudFront. Le risposte di failover includono l’intestazionex-edgeoptimize-fo: 1, che puoi utilizzare a scopo di monitoraggio e debug. -
Memorizzazione in cache: per impostazione predefinita, Cloudflare memorizza le risposte nella cache in base all’URL. Poiché il traffico da IA agentica riceve contenuti diversi rispetto al traffico da persone, assicurati che la configurazione della cache tenga conto di tali differenze. Per distinguere i contenuti memorizzati in cache, puoi utilizzare l’API cache o intestazioni per la cache. L’intestazione
x-edgeoptimize-configdeve essere inclusa nella chiave della cache. -
Limite di frequenza: monitora l’utilizzo del servizio Edge Optimize e, se necessario, puoi implementare un limite di frequenza per il traffico da IA agentica.
-
Test: prima di implementare in produzione, verifica sempre la configurazione in un ambiente di staging. Verifica che il sia traffico agentico sia quello da persone si comportino come previsto. Verifica il comportamento di failover simulando errori del servizio Edge Optimize.
-
Registrazione: abilita la registrazione dei processi di lavoro Cloudflare per monitorare le richieste e risolvere eventuali problemi. Passa a Workers (Processi di lavoro) > tuo processo di lavoro > Logs (Registri) per visualizzare i registri in tempo reale. Il processo di lavoro registra gli eventi di failover a scopo di debug.
Risoluzione dei problemi
x-edgeoptimize-request-id nella rispostaAGENTIC_BOTS.EDGE_OPTIMIZE_API_KEY sia impostato correttamente nelle variabili di ambiente e nei segreti. Contatta Adobe per verificare che la tua chiave API sia attiva.x-edgeoptimize-request sia attivo.TARGETED_PATHS sia configurato correttamente.x-edgeoptimize-fo: 1 nella rispostaFAILOVER_ON_4XX e FAILOVER_ON_5XX siano impostati su true. Verifica la presenza di messaggi di errore nei registri del processo di lavoro.TARGETED_PATHS (se specificato) e che corrisponda al pattern regex della pagina HTML.EDGE_OPTIMIZE_TARGET_HOST include il protocollo, ad esempio https://.example.com e non https://example.com).Consenti ottimizzazione in Edge tramite regole firewall (facoltativo)
Se la rete CDN utilizza un WAF o un Bot Manager:
-
Inserire nell’elenco Consentiti l’agente utente
*AdobeEdgeOptimize/1.0*nel WAF o nel gestore bot in modo che il servizio Optimize at Edge possa recuperare il contenuto di origine. -
Se il firewall richiede ulteriori verifiche oltre all’agente utente, generare un segreto (ad esempio,
openssl rand -hex 32) e:- Aggiungi
x-edgeoptimize-fetcher-keycon il segreto nelle regole di routing insieme alle altre intestazionix-edgeoptimize-*. - Aggiungi una regola di WAF o Bot Manager per consentire le richieste in cui
x-edgeoptimize-fetcher-keycorrisponde allo stesso segreto.
- Aggiungi
-
Ottimizza in Edge inoltra questa intestazione così com’è, sei il proprietario dell’intero ciclo di vita delle chiavi.
Verificare la configurazione
Dopo aver completato la configurazione, verifica che il traffico proveniente da bot venga indirizzato al servizio Edge Optimize e che il traffico da persone non sia interessato da alcuna modifica.
1. Test del traffico da bot (deve risultare ottimizzato)
Simula una richiesta da un bot IA utilizzando un agente utente da IA agentica:
curl -svo /dev/null https://www.example.com/page.html \
--header "user-agent: chatgpt-user"
Se il test ha esito positivo, la risposta contiene l’intestazione x-edgeoptimize-request-id, a conferma che la richiesta è stata indirizzata tramite il servizio Edge Optimize:
< HTTP/2 200
< x-edgeoptimize-request-id: 50fce12d-0519-4fc6-af78-d928785c1b85
2. Test del traffico da persone (deve risultare NON interessato da modifiche)
Simula una normale richiesta inserita da una persona nel 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"
La risposta non deve contenere l’intestazione x-edgeoptimize-request-id. Il contenuto della pagina e il tempo di risposta devono risultare identici rispetto a prima che sia stata abilitata la funzione Ottimizza su rete edge.
3. Differenze tra i due scenari
x-edgeoptimize-request-idx-edgeoptimize-fo1)Lo stato del routing del traffico può essere controllato anche nell’interfaccia utente di LLM Optimizer. Passa a Configurazione cliente e seleziona la scheda Configurazione CDN.
Per ulteriori informazioni su Ottimizza in Edge, tra cui le opportunità disponibili, i flussi di lavoro di ottimizzazione automatica e le domande frequenti, torna alla Panoramica sull’ottimizzazione in Edge.