Cloudfront/S3:根据请求标头服务器不同的文件
Posted
技术标签:
【中文标题】Cloudfront/S3:根据请求标头服务器不同的文件【英文标题】:Cloudfront/S3: Server different file depending on Request Header 【发布时间】:2014-04-07 08:35:01 【问题描述】:我在 CloudFront 和 S3 上托管使用 Middleman 生成的静态网站。我想添加多语言支持,中间人允许我本地化内容并在 /index.html 获得英文版本,在 /sp/index.html 获得翻译内容。
我希望能够检测请求中的“Accept-Language”标头,并基于该服务器 /index.html 或 /sp/index.html 。
根据我的研究,我看不到使用 S3 和 Cloudfront 执行此操作的方法,但也许你们有想法?
如果没有使用 CloudFront 和 S3 执行此操作的“适当且好的方法”,那么下一个最佳选择是什么?目前我正在考虑检测 javascript 中的语言,如果语言不是英语则重定向用户。
你好,金
【问题讨论】:
可以在bucket前面设置代理服务器并添加重写条件 【参考方案1】:如 cmets 中所述,您将需要某种可以读取请求标头并重定向或提供动态内容的仲裁器。 S3 是那里的问题。
CloudFront 可以forward the Accept-Language header to your origin server,并确保仅针对每种语言缓存内容。所以那部分不是问题。
如果 S3 是您的来源,那么您会遇到问题,因为您的文件是静态的,无法处理带有语言信息的传入请求。我不建议尝试使用 JavaScript 检测语言。 It's problematic.
虽然 CloudFront 可以配置多个来源(在您的情况下,每种语言一个),但它无法根据请求标头转发到这些来源。目前“行为”只能匹配 URL 路径。我怀疑他们可能会在某个时候引入标头规则,但在他们这样做之前(或者除非你能找到另一个这样做的 CDN)我恐怕我的答案将是“你不能”的答案。
由于您的网站都是纯 HTML,我怀疑您对包含各种 CloudFront 行为和动态服务器脚本等的复杂解决方案不感兴趣。
我认为到目前为止,您最好的选择是一种简单、技术含量低的选择 --
为访问者提供语言选择,并允许他们从任何页面切换语言。这也避免了意外 - 如果我用英语谷歌搜索某些内容,但我说西班牙语,我应该会看到我用谷歌搜索过的英文页面,然后如果我愿意,就切换到西班牙语。
【讨论】:
以上是关于Cloudfront/S3:根据请求标头服务器不同的文件的主要内容,如果未能解决你的问题,请参考以下文章
AWS - Cloudfront、S3 和 W3TotalCache 的 CORS 标头失败
CloudFront / S3 ETag:CloudFront 是不是可以在 CF TTL 过期之前发送更新的 S3 对象?