如何使 AWS ALB 将请求源发送到 lambda

Posted

技术标签:

【中文标题】如何使 AWS ALB 将请求源发送到 lambda【英文标题】:How to make AWS ALB send request origin to lambda 【发布时间】:2022-01-12 21:21:37 【问题描述】:

对于 API Gateway + Lambda,发送到 Lambda 的事件包含 Origin 标头,可用于设置响应的“Access-Control-Allow-Origin”标头。

ALB 事件似乎不包含 Origin 标头。有没有办法配置 ALB 以使其转发请求的 Origin 标头?

这是到达 Lambda 的 ALB 事件示例 https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html


    "requestContext": 
        "elb": 
            "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/lambda-279XGJDqGZ5rsrHC2Fjr/49e9d65c45c6791a"
        
    ,
    "httpMethod": "GET",
    "path": "/lambda",
    "queryStringParameters": 
        "query": "1234ABCD"
    ,
    "headers": 
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "accept-encoding": "gzip",
        "accept-language": "en-US,en;q=0.9",
        "connection": "keep-alive",
        "host": "lambda-alb-123578498.us-east-2.elb.amazonaws.com",
        "upgrade-insecure-requests": "1",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
        "x-amzn-trace-id": "Root=1-5c536348-3d683b8b04734faae651f476",
        "x-forwarded-for": "72.12.164.125",
        "x-forwarded-port": "80",
        "x-forwarded-proto": "http",
        "x-imforwards": "20"
    ,
    "body": "",
    "isBase64Encoded": false

【问题讨论】:

ALB 只是传递 Web 浏览器发送给它的标头。在这种情况下,Web 浏览器没有发送 Origin 标头。仅当有人单击网站上链接到所提供的 URL 的链接时,才会出现 Origin 标头。 @MarkB 明白了。谢谢。 【参考方案1】:

您可以配置 ALB 以转发包含特定标头的请求。

这样做

转到 ALB 中的侦听器选项卡 您要配置的监听器的点击规则 然后,选择插入规则,添加条件转发客户标头。

更多详情请访问this doc。

【讨论】:

以上是关于如何使 AWS ALB 将请求源发送到 lambda的主要内容,如果未能解决你的问题,请参考以下文章

将 NSOperationQueue 作为数据源发送到 UITableView

AWS ECS ALB 错误(请求超时)

AWS使用ALB负载均衡遇到的问题

如何从私有 AWS ALB 公开 API 端点

将请求转发到 ALB 的 NGINX 配置

如何使用 kubernetes_ingress terraform 资源创建 AWS ALB?