Ben*_*ada 7 amazon-web-services amazon-cloudfront
我试图利用CloudFront上的AWS地理跟踪功能通知我的UI用户位置,以便它知道不会在有问题的区域加载某些文件。
AWS文档提到了以下内容,但未给出有关如何准确配置CloudFront以便将CloudFront-Viewer-Country标头转发到原始位置的明确说明。我需要这样做,以便对缓存对象的请求产生带有CloudFront-Viewer-Country值的响应。
配置CloudFront以根据查看器的位置缓存对象
如果希望CloudFront根据请求来自的国家/地区缓存对象的不同版本,请配置CloudFront以将CloudFront-Viewer-Country标头转发到您的来源。CloudFront会自动将请求来自的IP地址转换为两个字母的国家/地区代码。有关易于使用的国家/地区代码列表(可按代码和国家/地区名称排序),请参阅Wikipedia条目ISO 3166-1 alpha-2。
nid*_*dal 10
我使用 Cloudfront 请求标头在我的 Nginx 配置中使用 add_header 实现了相同的解决方案。
add_header cloudfront-viewer-country $http_cloudfront_viewer_country;
Run Code Online (Sandbox Code Playgroud)
我认为这将是一个更便宜、更快的解决方案。
CloudFront默认情况下无法执行此操作-CloudFront-Viewer-Country用作发送到源的请求标头,而不是发送到浏览器的响应标头。
但是,使用Lambda @ Edge原点响应触发器,可以实现您似乎想做的事情:将该标头及其值回显到响应中。在原始响应处理期间,也可以访问转发到原始位置的大多数原始请求标头。
“ AWS文档提到了以下内容,但未给出有关如何准确配置CloudFront以便将
CloudFront-Viewer-Country
标头转发到原始位置的明确说明。”
通过在“ 基于选定的请求标头的缓存”下的“缓存行为”设置中,通过选择Whitelist
并CloudFront-Viewer-Country
在左侧的框中选择并将其移动到右侧的框,可以完成此操作。
您将需要将此标头列入白名单以转发到原点,以便Lambda @ Edge可以使用它-即使您的原点不使用或不需要它-您仍需要转发它才能使此功能正常工作如预期的那样,因为原始请求触发器无法看到CloudFront无法转发的内容...,并且除非将白名单(包括CloudFront-*
CloudFront可以注入的大多数标题)列入白名单,否则大多数标题都不会转发。
'use strict';
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
const response = event.Records[0].cf.response;
if(request.headers['cloudfront-viewer-country'])
{
response.headers['cloudfront-viewer-country'] = request.headers['cloudfront-viewer-country'];
}
return callback(null,response);
};
Run Code Online (Sandbox Code Playgroud)
请注意,Lambda @ Edge要求标头对象中的外键始终小写,而不管实际的标头字母大小写如何。
归档时间: |
|
查看次数: |
4919 次 |
最近记录: |