我试图在AWS Cloudfront上使用lambda@edge实现多个网站的“代理”。
我的设置大致如下:
DNS:*.domain.com -> some_uuid.cloudfront.net (云锋分布)
云阵: some_uuid.cloudfront.net -> s3桶起源
s3桶:网站/(包含多个网站的文件夹)
lambda@edge函数:定义为原始-请求
我的lambda@edge函数非常简单:
我有困难获得的起源域的网站。例如,如果我尝试访问"my_website.domain.com“-在我的lambda函数中,我没有来自请求的域信息。
我认为我可以实现另一个lambda@edge函数作为查看器请求将域作为标题传递,但如果可以的话,我更愿意避免这种情况。
还有别的解决办法吗?
谢谢
发布于 2017-12-15 19:27:27
因此,用例的问题是,暴露于原点的主机标头的值--请求L@E函数是s3桶的域名,而不是原始主机标头CloudFront从查看器接收到的值,对吗?
为了查看查看器接收到的原始主机头CloudFront,需要将其白名单。但是,CloudFront目前不允许为s3源文件添加白名单标题。这是一个缺陷/限制,应该由CloudFront修复。不过,有一个解决办法。如果s3桶是可公开访问的(也就是说,您没有使用原产地访问标识),那么您可以使用一个网站端点(如myBucket.s3-网站-us 1.amazonaws.com)将您的S3原点配置为自定义源。然后,你将能够白名单主机标题,并看到您的网站的域名,应观众的要求。然后,您可以根据用例修改源请求。还不要忘记将主机标头更改回s3端点,以便S3能够接受请求。
https://stackoverflow.com/questions/47817019
复制相似问题