从 F5 迁移到 Application Load Balancer 时修改HTTP标头 AWS - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 F5 迁移到 Application Load Balancer 时修改HTTP标头 AWS

由 Sachin Trivedi 创作 () AWS

摘要

当您将使用 F5 负载均衡器的应用程序迁移到 Amazon Web Services (AWS) 并希望在其上使用应用程序负载均衡器时AWS,迁移用于修改标头的 F5 规则是一个常见问题。Application Load Balancer 不支持修改标头,但你可以使用亚马逊 CloudFront 作为内容分发网络 (CDN),使用 Lambda @Edge 来修改标头。

此模式描述了所需的集成,并提供了使用AWS CloudFront 和 Lambda @Edge 修改标头的示例代码。

先决条件和限制

先决条件

  • 一种本地应用程序,它使用 F5 负载均衡器,其配置通过使用if, else替换HTTP标头值。有关此配置的更多信息,请参阅 F5 产品文档中的HTTP:: header。 

限制

  • 此模式适用于 F5 负载均衡器标头自定义。对于其他第三方负载均衡器,请查看负载均衡器文档以获取支持信息。

  • 用于 Lambda@Edge 的 Lambda 函数必须位于美国东部(弗吉尼亚州北部)区域。

架构

下图显示了架构AWS,包括与其他AWS组件之间的集成流程。CDN

使用亚马逊 CloudFront 和 Lambda 修改标题的架构 @Edge

工具

AWS 服务

  • A@@ pplication L oad Balancer — Application Load Balancer 是一项AWS完全托管的负载平衡服务,在开放系统互联 (OSI) 模型的第七层运行。它可以平衡多个目标之间的流量,并支持基于HTTP标头和方法、查询字符串以及基于主机或基于路径的路由的高级路由请求。

  • 亚马逊 CloudFront — Amazon CloudFront 是一项网络服务,可加快向用户分发静态和动态网页内容(例如.html、.css、.js 和图像文件)的速度。 CloudFront 通过名为边缘位置的全球数据中心网络提供内容,以降低延迟并提高性能。

  • Lambda @Edge ─ Lambda @Edge 是 Lambda AWS 的扩展,它允许你运行函数来自定义所提供的内容。 CloudFront 您可以在美国东部(弗吉尼亚北部)区域创作函数,然后将该函数与 CloudFront 发行版相关联,以便在不预配置或管理服务器的情况下自动在全球范围内复制您的代码。如此便可减少延迟并改善用户体验。

代码

以下示例代码提供了修改 CloudFront 响应标头的蓝图。按照操作说明部分中的说明部署代码。

exports.handler = async (event, context) => {     const response = event.Records[0].cf.response;     const headers = response.headers;     const headerNameSrc = 'content-security-policy';     const headerNameValue = '*.xyz.com';     if (headers[headerNameSrc.toLowerCase()]) {         headers[headerNameSrc.toLowerCase()] = [{             key: headerNameSrc,             value: headerNameValue,         }];         console.log(`Response header "${headerNameSrc}" was set to ` +                     `"${headers[headerNameSrc.toLowerCase()][0].value}"`);     }     else {             headers[headerNameSrc.toLowerCase()] = [{             key: headerNameSrc,             value: headerNameValue,             }];     }     return response; };

操作说明

任务描述所需技能
创建 CloudFront Web 分发。

在此步骤中,您将创建一个 CloudFront 分发,以告知您要从 CloudFront 哪里交付内容,以及有关如何跟踪和管理内容交付的详细信息。

要使用控制台创建发行版,请登录AWS管理控制台,打开CloudFront 控制台,然后按照CloudFront 文档中的步骤进行操作。

云管理员
任务描述所需技能
创建并部署 Lambda@Edge 函数。

您可以使用修改 CloudFront 响应标头的蓝图来创建 Lambda @Edge 函数。( bluePrints 其他适用于不同的用例;有关更多信息,请参阅 CloudFront 文档中的 Lambda @Edge 示例函数。) 

若要创建 Lambda@Edge 函数:

  1. 登录AWS管理控制台并打开 AWS Lambda 控制台,网址为。https://console.aws.amazon.com/lambda/

  2. 请确保您位于美国东部(弗吉尼亚北部)地区。 CloudFront 蓝图仅在该地区可用。

  3. 选择 Create function (创建函数)

  4. 选择使用蓝图,然后在蓝图搜索字段中输入 cloudfront。 

  5. 选择cloudfront-modify-response-header蓝图,然后选择配置

  6. 基本信息页面上,输入以下信息:

    1. 输入函数名称。

    2. 对于 Execution role(执行角色),请选择 Create a new role from AWS policy templates(从亚马逊云科技策略模板创建新角色)。

    3. 关联所需的AWS身份和访问管理 (Identity and Access ManagementIAM) () 角色名称。

  7. 选择 Create function (创建函数)

  8. 在页面的设计器部分中,选择您的函数名称。

  9. 函数代码部分中,将模板代码替换为之前在代码部分中此模式中提供的示例代码。

  10. 在示例代码中,将 xyz.com 替换为您的域名。 

  11. 选择保存

AWS 管理员
部署 Lambda@Edge 函数。

按照亚马逊 CloudFront 文档中教程第 4 步:创建简单的 Lambda @Edge 函数中的说明配置 CloudFront 触发器并部署该函数。

AWS 管理员

相关资源

CloudFront 文档