1

我正在使用 CloudFront 和在服务器上运行的 mod_pagespeed。

更新 CSS 或刷新缓存时,我看到有问题的行为,首先在浏览器上刷新会返回原始 CSS(这很好)。当我第二次刷新时,我得到了正确的操纵 CSS 文件名,但来自 CloudFront 的文件内容仍然是原始内容,而不是正确的操纵内容。

为什么会发生这种情况?知道如何解决这个问题吗?

更新:

由于某种原因,它刚刚停止发生......我不知道为什么。

4

2 回答 2

1

SimonW,自从您的原始帖子以来,pagespeed(2013 年 3 月的 1.2.24.1 版本中)添加了一项功能来直接处理此问题。该指令通过以下方式启用:

Apache:ModPagespeedRewriteDeadlinePerFlushMs dead_value_in_milliseconds

Nginx: 页面速度 RewriteDeadlinePerFlushMs dead_value_in_milliseconds;

文档将指令描述如下(强调我的):

当 PageSpeed 尝试重写未缓存(或过期)的资源时,它将等待每个刷新窗口最多 10 毫秒(默认情况下)以完成并返回优化的资源(如果可用)。如果在该时间内未完成,则返回原始(未优化)资源,优化器将移至后台以供将来请求。可以应用以下指令来更改截止日期。增加此值会增加页面延迟,但可能会减少加载时间(例如在值得等待图像压缩完成的带宽受限的链接上)。请注意,小于或等于零的值将导致 PageSpeed 无限期地等待。

因此,如果您为 deadline_value_in_milliseconds 指定值 0,您应该始终获得完全优化的页面。我会警告说,在某些情况下,延迟可能会很高。在我的情况下,我真的想要这种行为,即使存在延迟问题,因为内容要缓存在我的 CDN 的边缘服务器上,因此,我希望将最优化的版本提供给 CDN 进行缓存。

于 2014-11-16T06:11:07.717 回答
0

如果您有多个后端服务器并且 CloudFront 访问的服务器与 HTML 请求所通过的服务器不同,则可能会发生这种情况。在这种情况下,资源在 HTML 服务器上被重写,而不是在其他服务器上。有一个短暂的超时,如果其他服务器在这段时间内没有完成重写,它只会使用Cache-Control: private,max-age=300. CloudFront 可能会缓存一段时间(尽管显然不应该),但最终会从您的后端重新请求资源并获得正确重写的版本。

于 2013-09-12T14:18:30.333 回答