我使用Serverless开发了一个AWS Lambda代理,以便调用私有API,处理其结果并返回它。
这很简单,尽管在HTTP请求中设置了“ X-Forwarded-For”后,私有API不会返回任何内容。
我在CloudFront,CloudFormation或API Gateway中都找不到将此标头列入黑名单的方法。
我应该在哪里找?
作为参考,我使用的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
答案 0 :(得分:1)
Amazon Lambda不允许设置X-Forwared- *标头。它已经是列入黑名单的标头的一部分。如果将其设置为Lambda函数的一部分,则CloudFront的默认行为是该请求未通过CloudFront验证。 CloudFront将HTTP状态代码502(错误网关)返回给查看器。
有关黑名单标题列表的更多信息,请参见以下链接:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-cloudfront-star-headers
如果要CloudFront添加任何CloudFront- *标头,则必须将CloudFront配置为基于这些标头进行缓存。有关将CloudFront配置为基于指定的标头进行缓存的信息,请参见以下链接:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesForwardHeaders
请注意,对于查看器事件,CloudFront-Viewer-Country被列入黑名单。不会公开列入黑名单的标头,并且Lambda @ Edge函数无法添加标头。如果您的Lambda函数添加了列入黑名单的标头,则该请求将无法通过CloudFront验证,并且CloudFront会向查看器返回HTTP状态代码502(错误网关)。
希望这会有所帮助。
答案 1 :(得分:0)
您是否正在使用leboncoin.fr的API?如果是这样,似乎他们使用datadome来启用漫游器保护,这将解释在何处设置此标头以及为什么该API会阻止您的请求。