我正在使用CloudFront,并在服务器上运行mod_pagespeed。
当更新CSS或刷新缓存时,我看到有问题的行为,首先刷新浏览器返回原始的css(这很好)。当我第二次刷新时,我得到了正确的被操纵的CSS文件名,但是CloudFront中的文件内容仍然是原始内容,而不是正确的操作内容。
为什么会这样? 知道如何解决这个问题吗?
更新
出于某种原因,它刚刚停止发生......我不知道为什么。
答案 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可能会暂时缓存(尽管很明显它不应该),但最终会从后端重新请求资源并在此次获得正确的重写版本。