CloudFront和mod_pagespeed - 收到错误的内容

时间:2012-11-14 11:15:28

标签: apache cdn amazon-cloudfront mod-pagespeed

我正在使用CloudFront,并在服务器上运行mod_pagespeed。

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

为什么会这样? 知道如何解决这个问题吗?

更新

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

2 个答案:

答案 0 :(得分:1)

SimonW,因为您的原始帖子已添加到pagespeed(2013年3月版本1.2.24.1)中,以直接处理此问题。该指令通过以下方式启用:

的Apache: ModPagespeedRewriteDeadlinePerFlushMs deadline_value_in_milliseconds

Nginx的: pagespeed RewriteDeadlinePerFlushMs deadline_value_in_milliseconds;

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

  

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

因此,如果为deadline_value_in_milliseconds指定值0,则应始终获得完全优化的页面。我要提醒的是,在某些情况下,延迟可能很高。我的情况,即使考虑到延迟问题,我也非常想要这种行为,因为内容要缓存在我的CDN边缘服务器上,因此,我希望最优化的版本可以提供给CDN for缓存。

答案 1 :(得分:0)

如果您有多个后端服务器并且CloudFront与HTML请求所经历的不同,则可能会发生这种情况。在这种情况下,资源在HTML服务器上重写,但在其他服务器上没有。有一个短暂的超时,如果其他服务器在那段时间内没有完成重写,它将仅使用Cache-Control: private,max-age=300提供原始内容。 CloudFront可能会暂时缓存(尽管很明显它不应该),但最终会从后端重新请求资源并在此次获得正确的重写版本。