CloudFront (BYOCDN)
此配置将代理流量(来自AI机器人和LLM用户代理的请求)路由到Edge优化后端服务(live.edgeoptimize.net)。 与往常一样,我们仍将从您的源头为人类访客和SEO机器人提供服务。 要测试配置,请在设置完成后查找响应中的标头x-edgeoptimize-request-id。
先决条件
在设置CloudFront配置之前,请确保您具有:
- 为网站提供服务的现有CloudFront分发。
- 用于创建Lambda函数、IAM角色、CloudFront分配和缓存策略的AWS IAM权限。
- 已完成LLM Optimizer载入流程。
- 已完成到LLM Optimizer的CDN日志转发。
- 从Edge UI检索到LLM Optimizer优化API密钥。
检索API密钥的步骤:
-
导航到 客户配置 并选择 CDN配置 选项卡。
-
在 AI流量路由到部署优化 下,勾选 将优化部署到AI代理 复选框。
-
复制API密钥,并继续执行下面的路由配置步骤。
note note NOTE 在此阶段,状态可能显示红叉,指示设置尚未完成。 这是正常情况 — 一旦您完成下面的路由配置并且AI机器人流量开始流动,状态将更新为绿色复选标记,确认路由已成功启用。
此外,如果您需要上述步骤的任何帮助,请联系您的Adobe客户团队或llmo-at-edge@adobe.com。
步骤1:创建Edge优化源
导航: AWS Console > CloudFront > Distributions > [您的分配] > Originates选项卡
-
单击创建来源。
-
配置源:
- 原始域:
live.edgeoptimize.net - 名称:
EdgeOptimize_Origin
- 原始域:
-
将所有其他字段保留为其默认值。
-
添加自定义标头:
table 0-row-2 1-row-2 2-row-2 页眉 值 x-edgeoptimize-api-key您的API密钥 x-forwarded-hostwww.example.com将
www.example.com替换为实际的网站域,将Your API key替换为您的Edge代表提供的Adobe优化API密钥。 -
单击创建来源。
步骤2:创建查看器请求函数
导航: AWS Console > CloudFront >函数
-
单击创建函数。
-
配置:
- 名称:
edgeoptimize-routing - 运行时:
cloudfront-js-2.0
- 名称:
-
将默认代码替换为viewer-request.js中的代码。
在发布之前,请自定义代码中的以下值:
YOUR_DEFAULT_ORIGIN— 将替换为您现有的默认源的名称(可在CloudFront > Distributions > [Your Distribution] > Origines选项卡中找到)。TARGETED_PATHS— 设置为null以定位所有HTML页面,或设置为特定路径的数组,例如['/', '/products', '/about']。
-
单击保存更改 > 发布函数。
步骤3:配置缓存策略
导航: AWS Console > CloudFront >分发> [您的分发] >行为
检查当前附加到您行为的缓存策略。 单击行为上的编辑,查看 缓存密钥和源请求 部分以识别您的方案:
- 方案A (旧版):您看到一个单选按钮,标记为已选择旧版缓存设置。 没有策略名称下拉列表,而是会看到内联TTL和标头设置。
- 方案B(自定义策略):您看到使用您或您的团队创建的策略名称(不是AWS提供的策略)选择的缓存策略。
- 方案C (托管策略):您看到使用AWS提供的名称(如
CachingOptimized、CachingDisabled或CachingOptimizedForUncompressedObjects)选择的缓存策略 — 这些无法编辑。
方案A:旧版缓存设置
如果您的行为使用旧版缓存设置:
-
在 缓存密钥和原始请求 下,您将看到已选择旧版缓存设置。
-
将
x-edgeoptimize-config和x-edgeoptimize-url添加到 标头 允许列表:- 从下拉列表中选择Include the headers。
- 添加
x-edgeoptimize-config和x-edgeoptimize-url。
如果您已在“标头”下拉列表中选择所有,请跳过此步骤 — 所有标头都会自动转发到来源。
-
检查 对象缓存 设置:
- 如果设置为自定义 — 建议将 最小TTL 设置为
0。 但是,如果当前的最低TTL已经非常短,则可能不需要对其进行更改。 - 如果设置为使用原始缓存标头 — 无需更改。
- 如果设置为自定义 — 建议将 最小TTL 设置为
-
单击保存更改。
方案B:具有自定义缓存策略的非旧版本
如果您的行为已使用自定义缓存策略(您创建的策略,而不是AWS托管策略):
导航: AWS Console > CloudFront >策略>缓存
-
单击现有策略。
-
单击编辑。
-
建议将 最小TTL 设置为
0。 但是,如果当前的最低TTL已经非常短,则可能不需要对其进行更改。
-
在缓存键设置 > 标头以及您现有的包含项下,添加
x-edgeoptimize-config和x-edgeoptimize-url。
-
单击保存更改。
方案C:具有托管(AWS)缓存策略的非旧版
如果您的行为使用AWS托管缓存策略(例如,CachingOptimized),则无法对其进行编辑。 您需要创建新的自定义缓存策略,以复制现有的托管策略设置并在顶部添加Edge优化标头。
第1部分:记下当前托管缓存策略设置
导航: AWS Console > CloudFront >策略>缓存
-
查找并单击当前附加到您的行为的托管缓存策略(例如,
CachingOptimized)。 -
记下所有现有设置:
- 最小TTL、最大TTL、默认TTL
- 缓存键中包含的标头
- 缓存键中包含的Cookie
- 缓存键中包含的查询字符串
- 压缩支持(Gzip、Brotli)
第2部分:使用相同的设置创建新的自定义缓存策略+ Edge优化配置
导航: AWS Console > CloudFront >策略>缓存
-
单击创建缓存策略。
-
名称:
edgeoptimize-cache
-
复制第1部分中记录的所有设置,并进行以下修改:
- 建议将 最小TTL 设置为
0。 但是,如果当前的最低TTL已经非常短,则可能不需要对其进行更改。
- 在缓存键设置 > 标头下,包含托管策略所具有的所有内容,并添加
x-edgeoptimize-config和x-edgeoptimize-url。
- 建议将 最小TTL 设置为
-
单击创建。
-
返回您的行为并关联新创建的策略:
导航: AWS Console > CloudFront >分发> [您的分发] >行为
- 编辑您的行为。
- 在 缓存密钥和原始请求 下,选择缓存策略。
- 从下拉列表中选择
edgeoptimize-cache。 - 单击保存更改。
步骤4:创建Lambda@Edge函数(原始请求和响应)
us-east-1 (弗吉尼亚北部)区域中创建Lambda@Edge函数。 这是AWS的要求。 即使函数是在us-east-1中创建的,AWS仍会自动将其复制到全球所有CloudFront边缘位置,因此它会在距离查看器最近的边缘位置执行。 在继续之前,请确保您位于AWS控制台的us-east-1区域中。创建Lambda函数
导航: AWS控制台> Lambda
-
单击创建函数。
-
从头开始选择创作。
-
配置:
- 函数名称:
edgeoptimize-origin - 将所有其他字段保留为其默认值。
- 函数名称:
-
单击创建函数。
-
在代码编辑器中,将默认代码替换为origin-request-response.js中的代码。
-
单击 部署 以保存代码。
-
请注意配置 > 权限下显示的执行角色名称(例如,
edgeoptimize-origin-role-xxxxx)。 您需要在以下步骤中完成此操作。
更新执行角色的信任策略
自动创建的角色仅信任lambda.amazonaws.com。 对于Lambda@Edge,您还必须添加edgelambda.amazonaws.com。
导航: AWS Console > IAM >角色> [您在上一步中的角色] >信任关系选项卡
-
单击编辑信任策略。
-
将策略替换为trust-policy.json中的内容。
-
单击更新策略。
edgelambda.amazonaws.com服务主体是必需的。 没有它,CloudFront无法在边缘位置调用您的函数。修复CloudWatch日志权限策略
自动创建的角色带有为常规Lambda配置的AWSLambdaBasicExecutionRole策略,该策略具有错误的Lambda@Edge区域和日志组名称。 你需要更新它。
导航: AWS Console > IAM >角色> [您的角色] >权限选项卡>单击附加的策略名称(例如,AWSLambdaBasicExecutionRole-xxxx)
-
单击编辑。
-
将策略替换为cloudwatch-policy.json中的内容。
在JSON中,将
ACCOUNT_ID替换为您的实际AWS帐户ID(可在AWS控制台的右上角找到),将FUNCTION_NAME替换为Lambda函数的名称(例如,edgeoptimize-origin)。 -
单击保存更改。
* — Lambda@Edge在距离查看器最近的边缘位置执行,因此日志将写入边缘位置区域的CloudWatch(例如,ap-south-1, eu-west-1),不一定是us-east-1。 日志组使用区域前缀名称: /aws/lambda/us-east-1.FUNCTION_NAME,其中us-east-1始终是函数的主区域。发布版本
-
在函数页面上,单击操作 (右上方) > 发布新版本。
-
添加描述。
-
单击发布。
-
复制或记下函数ARN — 在下一步中需要此项。
步骤5:将函数和缓存策略与行为关联
导航: AWS Console > CloudFront >分发> [您的分发] >行为
-
编辑您的行为。
-
如果您在步骤3(场景C)中创建新缓存策略,请将 缓存策略 设置为
edgeoptimize-cache。
-
在 函数关联 下,配置:
- 查看器请求:
edgeoptimize-routing - 源请求:来自步骤4的版本化函数ARN(在 发布版本 中)
- 源响应:来自步骤4的版本化函数ARN(在 发布版本 中)
- 查看器请求:
-
单击保存更改。
步骤6:测试配置
1. 测试机器人流量(应优化)
使用代理机器人用户代理发送请求。 在 第一个请求 上,Edge Optimize在处理并缓存页面时可能会返回代理(非优化)响应。 您可以通过响应中的x-edgeoptimize-proxy: 1标头标识此内容。
使用代理用户代理模拟AI机器人请求:
curl -svo /dev/null https://www.example.com/page.html \
--header "user-agent: chatgpt-user"
成功的响应包括x-edgeoptimize-request-id标头,用于确认请求是通过Edge优化路由的:
< HTTP/2 200
< x-edgeoptimize-request-id: 50fce12d-0519-4fc6-af78-d928785c1b85
2. 测试人员流量(不应受影响)
模拟常规的人类浏览器请求:
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"
响应应 不 包含x-edgeoptimize-request-id标头。 在Edge中启用优化之前,页面内容和响应时间应保持相同。
3. 如何区分这两种方案
x-edgeoptimize-request-idx-edgeoptimize-fo1)也可以在LLM Optimizer UI中查看流量路由的状态。 导航到 客户配置 并选择 CDN配置 选项卡。
4. 验证日志是否正确运行
运行上述测试请求后,验证是否为CloudFront函数和Lambda@Edge函数编写了日志。
CloudFront函数日志(edgeoptimize-routing)
导航: AWS Console > CloudWatch >日志组(在us-east-1中或配置了CloudFront分发的地区)
-
查找名为
/aws/cloudfront/function/edgeoptimize-routing的日志组。 -
打开最新的日志流。
-
对于代理请求,您应会看到如下条目:
Adding origin group for userAgent: chatgpt-userRouting to Edge Optimize origin for userAgent: chatgpt-user
-
对于非代理请求,您应会看到:
Routing to Default origin for userAgent: ...
您还可以检查 AWS Console > CloudFront > Functions > edgeoptimize-routing 下的 Metrics 选项卡,以查看调用数和错误率。
Lambda@Edge日志(edgeoptimize-origin)
us-east-1。 在距离运行curl命令的位置最近的AWS区域中检查CloudWatch。导航: AWS Console > CloudWatch >日志组(确保您在正确的区域)
-
查找名为
/aws/lambda/us-east-1.edgeoptimize-origin的日志组。 -
打开最新的日志流。
-
对于代理请求,您应会看到如下条目:
Calling Edge Optimize Origin for agentic requests— 主路径Calling Default Origin in case of failover for agentic requests— 故障转移路径Failover Triggered for agentic requests— 原点响应故障转移检测
如果日志组不存在,请确认已在步骤4中正确更新IAM权限。 另请检查其他AWS附近区域 — 提供请求的边缘位置可能与您期望的位置不同。
疑难解答
x-edgeoptimize-request-id响应代理请求YOUR_DEFAULT_ORIGIN(步骤2)。x-edgeoptimize-api-key标头值(步骤1)。us-east-1。cache-control: no-store0(步骤3)。 如果最低TTL已经很短,这可能不是问题。在Edge中禁用并重新启用优化
Lambda@Edge函数(edgeoptimize-origin)与CloudFront行为的源请求和源响应事件相关联。 由于它会在每个通过此行为的请求(包括人类和代理)上内联运行,因此Lambda@Edge中断将影响所有实时流量,而不仅仅是代理请求。 如果检测到Lambda@Edge中断,请立即删除函数关联以将正常通信流恢复到默认来源。
如何检测Lambda@Edge中断
- AWS服务运行状况仪表板 — 检查AWS服务运行状况仪表板,了解影响 Amazon CloudFront 或 AWS Lambda 的任何活动事件。 此处报告的全球或地区性中断是确认问题出现在AWS基础设施方而不是您的配置中的最快方法。
- Lambda@Edge错误 — 导航到AWS Console > CloudFront >监控> [您的分发]。 打开 Lambda@Edge错误 选项卡,并检查 执行错误 图形中的执行错误。 如果这些值很高,则Lambda@Edge可能会不可用。
分离Lambda@Edge函数
导航: AWS Console > CloudFront >分发> [您的分发] >行为
-
单击 编辑 您的行为。
-
向下滚动到 函数关联 部分。
-
将以下关联设置为无关联:
table 0-row-2 1-row-2 2-row-2 3-row-2 事件 更改为 查看器请求 无关联 源请求 无关联 源响应 无关联
-
单击保存更改。
-
等待CloudFront分发完成部署。 状态从 部署 更改为上次修改日期,通常在几分钟内。
部署后,所有流量都会直接路由到您的默认来源。 不删除任何配置;可以随时恢复Lambda函数及其关联。
重新附加Lambda@Edge函数
导航: AWS Console > CloudFront >分发> [您的分发] >行为
-
单击 编辑 您的行为。
-
向下滚动到 函数关联 部分。
-
恢复关联:
table 0-row-2 1-row-2 2-row-2 3-row-2 事件 设置为 查看器请求 edgeoptimize-routing(CloudFront函数)源请求 步骤4中的版本控制Lambda ARN 源响应 步骤4中的版本控制Lambda ARN 使用您在步骤4 (发布版本)中注意到的版本化函数ARN。
-
单击保存更改。
-
等待分发完成部署,然后验证代理请求是否按步骤6所述返回
x-edgeoptimize-request-id标头。
要进一步了解Edge优化,包括可用的机会、自动优化工作流和常见问题,请返回Edge优化概述。