aws-lambda - AWS Lambda 完成的 HTTP 请求中的 "X-Forwarded-*" header 问题

标签 aws-lambda amazon-cloudfront serverless-framework aws-serverless

我使用无服务器开发了一个 AWS Lambda 代理,以便调用私有(private) API、处理其结果并返回它。

这很简单,尽管一旦在 HTTP 请求中设置了“X-Forwarded-For”,私有(private) API 就不会返回任何内容。

我还没有找到在 CloudFront、CloudFormation 或 API Gateway 中将此 header 列入黑名单的方法。

我应该去哪里寻找?

作为引用,serverless.yml我用:

service: mylambda
provider:
  name: aws
  runtime: java8
  memorySize: 1024
  timeout: 240
package:
  artifact: target/awslambda-1.0-SNAPSHOT.jar
functions:
  leboncoinlist:
    handler: com.example.awslambda.handler.HttpRequestHandler
    events:
        - http:
            path: list
            method: post
            cors: true

最佳答案

Amazon Lambda 不允许设置 X-Forwared-* header 。它已经是列入黑名单的 header 的一部分。如果您要将其设置为 Lambda 函数的一部分,CloudFront 的默认行为是请求未通过 CloudFront 验证。 CloudFront 向查看器返回 HTTP 状态代码 502(错误网关)。

有关列入黑名单的 header 列表的更多信息,请参见以下链接:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-cloudfront-star-headers

如果您希望 CloudFront 添加任何 CloudFront-* header ,则必须将 CloudFront 配置为基于这些 header 进行缓存。有关将 CloudFront 配置为基于指定 header 进行缓存的信息,请参阅此链接了解更多信息:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesForwardHeaders

请注意,对于查看器事件,CloudFront-Viewer-Country 被列入黑名单。列入黑名单的 header 不会公开,也无法由 Lambda@Edge 函数添加。如果您的 Lambda 函数添​​加了列入黑名单的 header ,则请求将无法通过 CloudFront 验证,并且 CloudFront 会向查看器返回 HTTP 状态代码 502(错误网关)。

希望这可以帮助。

关于aws-lambda - AWS Lambda 完成的 HTTP 请求中的 "X-Forwarded-*" header 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51273658/

相关文章:

amazon-s3 - S3 托管网站 Cloudfront 分布和 API 网关自定义域指向同一子域

node.js - 如何正确从另一个 Lambda 调用 Lambda

amazon-dynamodb - 如何在 serverless.yml 中为 DynamoDb 设置标签

amazon-web-services - 无服务器框架 - 在 "self"源未找到值

node.js - 如何将batchWriteItem 与Node.js 结合使用来查询AWS DynamoDB?

amazon-web-services - Cloudformation资源创建/删除超时时间

amazon-web-services - 阻止 CloudFormation 从 CloudFront 中删除 Lambda Edge 关联

aws-lambda - Lambda 函数向 CloudFront 返回了无效请求或响应

amazon-web-services - 通过 CloudFront 的 S3 总是给我 AccessDenied 消息

node.js - 如果 AWS Lambda 本地调用,如何在 Jest 测试中传递正确的 JSON 事件