Cloudflare (BYOCDN)
Essa configuração roteia o tráfego de agente (solicitações de bots de IA e agentes de usuário LLM) para o serviço de back-end de Otimização da Edge (live.edgeoptimize.net). Visitantes humanos e bots de SEO continuam a ser oferecidos de sua origem como de costume. Para testar a configuração, após a conclusão da instalação, procure o cabeçalho x-edgeoptimize-request-id na resposta.
Pré-requisitos
Antes de configurar as regras de roteamento do Cloud Worker, verifique se você:
- Uma conta CloudFlare com Workers ativados em seu domínio.
- Acesso às configurações de DNS do seu domínio no Cloud Flare.
- O processo de integração do LLM Optimizer foi concluído.
- Encaminhamento de log CDN concluído para o LLM Optimizer.
- Uma chave de API de otimização do Edge recuperada da interface do usuário do LLM Optimizer.
- (Opcional) Para testar o roteamento de preparo, consulte Opcional: Testar roteamento em um nome de host de preparo no final desta página.
Etapas para recuperar a chave de API de otimização do Edge de produção:
-
Na LLM Optimizer, abra Configuração do cliente e selecione a guia Configuração de CDN.
-
Localize a seção Implantar otimizações em agentes de IA. Marque a caixa de seleção Habilitar mecanismo de otimização.
-
No diálogo de confirmação, selecione Habilitar.
-
Selecione Exibir detalhes. Na caixa de diálogo Implantar detalhes de otimizações, copie a Chave da API de Produção (use Copiar ao lado do campo).
note NOTE A caixa de diálogo pode mostrar que a configuração não está concluída. Isso é esperado até que o roteamento seja verificado — você ainda pode copiar a chave da API para que sua equipe de TI ou de CDN possa concluir a configuração.
Além disso, se você precisar de ajuda com as etapas acima, entre em contato com a equipe de conta da Adobe ou com o llmo-at-edge@adobe.com.
Como funciona o roteamento
Quando configurada corretamente, uma solicitação para o seu domínio (por exemplo, www.example.com/page.html) de um agente de usuário agente é interceptada pelo Cloud Worker e roteada para o back-end do Edge Otimize. A solicitação de backend inclui os cabeçalhos necessários.
Testando a solicitação de back-end
Você pode verificar o roteamento fazendo uma solicitação direta para o back-end do Edge Otimize.
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;'
Cabeçalhos obrigatórios
Os seguintes cabeçalhos devem ser definidos nas solicitações para o back-end do Edge Otimize:
x-forwarded-hostwww.example.comx-edgeoptimize-url/page.html ou /products?id=123x-edgeoptimize-api-keyyour-api-key-herex-edgeoptimize-configLLMCLIENT=TRUE;Opções de configuração
Há duas maneiras de configurar o Cloud Worker para otimização do Edge:
- Opção 1: Implantar no Cloudflare (recomendado) — Cria automaticamente um novo trabalhador e solicita as variáveis e os segredos de ambiente necessários. Use esta opção se você não tiver um Cloud Worker existente para este domínio.
- Opção 2: Configuração manual — instruções passo a passo para criar e configurar o funcionário você mesmo. Use esta opção se você já tiver um Cloud Worker existente que deseja estender ou se preferir ter controle total sobre a implantação.
Independentemente da opção escolhida, você deve vincular manualmente o trabalhador ao seu domínio. Consulte Etapa: adicionar uma rota ao seu domínio.
Opção 1: implantar no Cloud Flare
Esta opção usa o botão Implantar na Nuvem para criar automaticamente o trabalhador e configurar as variáveis de ambiente e os segredos necessários na sua conta da Nuvem. Essa é a maneira mais rápida de começar se você estiver configurando um novo trabalhador.
Etapa 1: implantar o trabalhador
Clique no botão abaixo para implantar o trabalhador Edge Otimize na sua conta do Cloud Flare:
Etapa 2: preencher o formulário de implantação
Clicar no botão abre a página Configuração de trabalhadores. Preencha o formulário da seguinte maneira:
-
Conta Git — selecione sua conta GitHub ou GitLab na lista suspensa. O Cloud Flare bifurca o código do trabalhador em um repositório em sua conta. Se nenhuma conta estiver listada, você poderá adicionar uma nova conexão diretamente da lista suspensa selecionando + Nova conexão GitHub ou + Nova conexão GitLab. Para obter mais informações, consulte o guia de integração Git da Cloudflare.
-
Criar repositório Git privado — Deixe esta opção marcada (padrão).
-
Nome do projeto — Deixe como
edge-optimize-routerou insira um nome de sua escolha. -
EDGE_OTIMIZE_API_KEY — Cole a chave de API do Edge Otimize fornecida pela Adobe. Esse valor é armazenado como um segredo criptografado.
-
EDGE_OTIMIZE_TARGET_HOST — Insira o domínio do site sem o protocolo (por exemplo,
www.example.com). -
Comando de compilação — Deixe vazio.
-
Comando de implantação — Deixe como
npm run deploy(pré-preenchido). -
Compilações para ramificações de não produção — Deixe desmarcado. Este é um recurso de fluxo de trabalho de desenvolvedor e não é necessário para esta implantação.
-
Clique em Criar e implantar.
Após a implantação do trabalhador, prossiga para Adicionar uma rota ao seu domínio para vincular o trabalhador ao seu domínio. O roteamento não é configurado automaticamente e deve ser concluído manualmente.
Opção 2: configuração manual
Siga estas etapas para criar e configurar o trabalhador manualmente.
Etapa 1: Criar o Trabalho da Cloudflare
- Faça logon no painel do Cloud.
- Navegue até Trabalhadores e páginas na barra lateral.
- Clique em Criar aplicativo e depois em Criar Trabalhador.
- Nomeie seu trabalhador (por exemplo,
edge-optimize-router). - Clique em Implantar para criar o trabalhador com o código padrão.
Etapa 2: adicionar o código do Trabalhador
Depois de criar o trabalhador, clique em Editar código e substitua o código padrão pelo seguinte:
/**
* 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;
}
Clique em Salvar e implantar para publicar o trabalhador.
Etapa 3: configurar variáveis e segredos de ambiente
As variáveis de ambiente armazenam configurações confidenciais como sua chave de API com segurança.
-
Nas configurações do seu trabalhador, navegue até Configurações > Variáveis.
-
Em Variáveis de Ambiente, clique em Adicionar variável.
-
Adicione as seguintes variáveis:
table 0-row-3 1-row-3 2-row-3 Nome da variável Descrição Obrigatório EDGE_OPTIMIZE_API_KEYSua chave de API de otimização Edge fornecida pela Adobe. Sim EDGE_OPTIMIZE_TARGET_HOSTO host de destino para as solicitações de Otimização do Edge (enviadas como cabeçalho x-forwarded-host) e o domínio de origem para failover. Deve ser somente o domínio sem protocolo (por exemplo,www.example.com, nãohttps://www.example.com).Sim -
Para a chave de API, clique em Criptografar para armazená-la com segurança.
-
Clique em Salvar e implantar.
Adicionar uma rota ao seu domínio add-a-route-to-your-domain
Independentemente da opção de configuração usada, é necessário vincular manualmente o trabalhador ao seu domínio. Essa etapa ativa o trabalhador em seu tráfego.
- Vá para as Configurações > Acionadores do seu trabalhador.
- Em Rotas, clique em Adicionar rota.
- Insira seu padrão de domínio (por exemplo,
www.example.com/*ouexample.com/*). - Selecione sua zona na lista suspensa.
- Clique em Salvar.
Como alternativa, você pode configurar rotas no nível da zona:
- Navegue até o domínio no Cloud Flare.
- Vá para Rotas dos Trabalhadores.
- Clique em Adicionar rota e especifique o padrão e o trabalhador.
Verificando o comportamento de failover
Se o Edge Otimize estiver indisponível ou retornar um erro, o worker efetuará automaticamente o failover para sua origem. As respostas de failover incluem o cabeçalho x-edgeoptimize-fo:
< HTTP/2 200
< x-edgeoptimize-fo: 1
Você pode monitorar eventos de failover nos logs do Cloud Workers para solucionar problemas.
Entendendo a lógica do Worker
O Cloud Worker implementa a seguinte lógica:
-
Detecção do Agente do Usuário: verifica se o agente do usuário da solicitação recebida corresponde a qualquer um dos bots de agente definidos (não diferencia maiúsculas de minúsculas).
-
Direcionamento de caminho: filtra opcionalmente solicitações com base em caminhos direcionados. Por padrão, todas as páginas do HTML (URLs terminadas com
/, sem extensão ou.html) são roteadas. Você pode especificar caminhos específicos usando a matrizTARGETED_PATHS. -
Proteção de loop: O cabeçalho
x-edgeoptimize-requestimpede loops infinitos. Quando o Edge Otimize faz solicitações de volta à sua origem, esse cabeçalho é definido como"1"e o trabalhador transmite a solicitação sem roteá-la de volta para o Edge Otimize. -
Segurança de cabeçalho: Antes de configurar cabeçalhos Edge Otimize, o trabalhador remove todos os cabeçalhos
x-edgeoptimize-*existentes da solicitação de entrada para evitar ataques de injeção de cabeçalho. -
Mapeamento de cabeçalho: o trabalhador define os cabeçalhos necessários para a Otimização Edge:
x-forwarded-host- Identifica o domínio do site original.x-edgeoptimize-url- Preserva o caminho da solicitação original e a sequência de consulta.x-edgeoptimize-api-key- Autentica a solicitação com o Otimize do Edge.x-edgeoptimize-config- Fornece a configuração da chave de cache.
-
Lógica de failover: se o Edge Otimize retornar qualquer código de status de erro (erros de cliente 4XX ou erros de servidor 5XX) ou a solicitação falhar devido a um erro de rede, o trabalhador efetuará automaticamente o failover para sua origem usando
EDGE_OPTIMIZE_TARGET_HOST. A resposta de failover inclui o cabeçalhox-edgeoptimize-fo: 1para indicar que o failover ocorreu. -
Tratamento de redirecionamento: a opção
redirect: "manual"garante que as respostas de redirecionamento do Edge Otimize sejam passadas para o cliente sem que o trabalhador as siga.
Personalizando a configuração
Você pode personalizar o comportamento do trabalhador modificando as constantes de configuração na parte superior do código:
Lista de bots de agente
Modifique a matriz AGENTIC_BOTS para adicionar ou remover agentes do usuário:
const AGENTIC_BOTS = [
'AdobeEdgeOptimize-AI',
'ChatGPT-User',
'GPTBot',
'OAI-SearchBot',
'PerplexityBot',
'Perplexity-User',
// Add additional user agents as needed
'ClaudeBot',
'Anthropic-AI'
];
Caminhos direcionados
Por padrão, todas as páginas do HTML são roteadas para o Edge Otimize. Para limitar o roteamento a caminhos específicos, modifique a matriz 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'];
Configuração de failover
Por padrão, o trabalhador falha em qualquer erro 4XX ou 5XX do Edge Otimize. Personalizar este 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;
Considerações importantes
-
Comportamento de failover: o trabalhador executará automaticamente o failover de sua origem se o Edge Otimize retornar qualquer erro (códigos de status 4XX ou 5XX) ou se a solicitação falhar devido a um erro de rede. O failover usa
EDGE_OPTIMIZE_TARGET_HOSTcomo o domínio de origem (semelhante aoF_Default_Origindo Fastly ou aoDefault_Origindo CloudFront). As respostas de failover incluem o cabeçalhox-edgeoptimize-fo: 1, que pode ser usado para monitoramento e depuração. -
Armazenamento em cache: o Cloud Flare armazena em cache as respostas com base na URL por padrão. Como o tráfego de agente recebe conteúdo diferente do tráfego humano, certifique-se de que a configuração de cache tenha em conta isso. Considere usar a API de cache ou cabeçalhos de cache para diferenciar o conteúdo em cache. O cabeçalho
x-edgeoptimize-configdeve ser incluído na sua chave de cache. -
Limitação de taxa: monitore seu uso do Edge Otimize e considere implementar a limitação de taxa para tráfego de agente, se necessário.
-
Testando: sempre teste a configuração em um ambiente de preparo antes de implantar em produção. Verifique se o tráfego de agentes e humanos se comportam conforme esperado. Teste o comportamento de failover simulando erros de Otimização do Edge.
-
Logs: Habilite o log de Trabalhadores em Nuvem para monitorar solicitações e solucionar problemas. Navegue até Workers > seu worker > Logs para exibir os logs em tempo real. O trabalhador registra eventos de failover para fins de depuração.
Resolução de Problemas
x-edgeoptimize-request-id na respostaAGENTIC_BOTS.EDGE_OPTIMIZE_API_KEY está definido corretamente nas variáveis e nos segredos do ambiente. Entre em contato com a Adobe para confirmar se a chave de API está ativa.x-edgeoptimize-request está em vigor.TARGETED_PATHS está configurado corretamente.x-edgeoptimize-fo: 1 na respostaFAILOVER_ON_4XX e FAILOVER_ON_5XX estão definidos como true. Verifique se há mensagens de erro nos logs do trabalhador.TARGETED_PATHS (se especificado) e corresponde ao padrão regex da página do HTML.EDGE_OPTIMIZE_TARGET_HOST inclui o protocolo (por exemplo, https://).example.com, não https://example.com).Permitir otimização na Edge por meio de regras de firewall (opcional)
Se o CDN usar um WAF ou Gerenciador de bot:
-
Inclua na lista de permissões o agente de usuário
*AdobeEdgeOptimize/1.0*no WAF ou no Gerenciador de bot para que o serviço Otimizar na Edge possa buscar o conteúdo de origem. -
Se o firewall exigir verificação adicional além do agente do usuário, gere um segredo (por exemplo,
openssl rand -hex 32) e:- Adicione
x-edgeoptimize-fetcher-keycom o segredo em suas regras de roteamento junto com os outros cabeçalhosx-edgeoptimize-*. - Adicione uma regra do WAF ou do Gerenciador de bot para permitir solicitações em que
x-edgeoptimize-fetcher-keycorresponde ao mesmo segredo.
- Adicione
-
Otimizar no Edge encaminha esse cabeçalho como está — você é o proprietário do ciclo de vida completo da chave.
Verificar a configuração
Após concluir a configuração, verifique se o tráfego de bot está sendo roteado para o Edge Otimize e se o tráfego humano não foi afetado.
1. Tráfego de bot de teste (deve ser otimizado)
Simular uma solicitação de bot de IA usando um user-agent agêntico:
curl -svo /dev/null https://www.example.com/page.html \
--header "user-agent: chatgpt-user"
Uma resposta bem-sucedida inclui o cabeçalho x-edgeoptimize-request-id, confirmando que a solicitação foi roteada pelo Edge Otimize:
< HTTP/2 200
< x-edgeoptimize-request-id: 50fce12d-0519-4fc6-af78-d928785c1b85
2. Testar tráfego humano (NÃO deve ser afetado)
Simular uma solicitação regular de navegador humano:
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"
A resposta deve não conter o cabeçalho x-edgeoptimize-request-id. O conteúdo da página e o tempo de resposta devem permanecer idênticos a antes de habilitar a opção Otimizar no Edge.
3. Como diferenciar entre os dois cenários
x-edgeoptimize-request-idx-edgeoptimize-fo1)O status do roteamento de tráfego também pode ser verificado na interface do usuário do LLM Optimizer. Navegue até Configuração do cliente e selecione a guia Configuração de CDN.
Opcional: Testar roteamento em um nome de host de preparo
Se você quiser validar o roteamento em um ambiente inferior antes de habilitar o roteamento de produção, poderá configurar um nome de host de preparo.
Requisitos
- O nome de host de preparo deve estar no mesmo domínio registrável que a produção (por exemplo,
https://staging.example.comquando a produção forhttps://www.example.com). - Apenas um domínio de preparo por site. Depois de salvo, não é possível alterá-lo sem entrar em contato com a Adobe.
Obtenha sua chave de API de preparo
- Abra Configuração do cliente e selecione Configuração da CDN.
- Em Implantar otimizações para agentes de IA, selecione Adicionar domínio de preparo (ou Domínio de preparo se um domínio de preparo já estiver configurado).
- Insira a URL de preparo completa incluindo
https://e selecione Definir Domínio. - Copie a chave de API de preparo da caixa de diálogo de confirmação.
Implante as mesmas regras de roteamento no ambiente de preparo usando a chave de API de preparo.
Testar tráfego de bot de preparo
Substitua https://staging.example.com/page.html com seu caminho e URL de preparo real. Êxito: a resposta inclui o cabeçalho x-edgeoptimize-request-id.
Se precisar de ajuda, contate llmo-at-edge@adobe.com.
curl -svo /dev/null https://staging.example.com/page.html \
--header "user-agent: chatgpt-user"
Para saber mais sobre como Otimizar na Edge, incluindo oportunidades disponíveis, fluxos de trabalho de otimização automática e perguntas frequentes, volte para a visão geral de Otimizar na Edge.