【问题标题】:CloudFront and mod_pagespeed - wrong content receivedCloudFront 和 mod_pagespeed - 收到错误的内容
【发布时间】:2023-03-11 14:05:01
【问题描述】:

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

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

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

更新:

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

【问题讨论】:

  • mod_pagespeed 应该为新的 CSS 文件生成一个新的文件名 - 你在刷新旧的文件名吗?新文件也应该是 CloudFront 拾取的文件...
  • @igrigorik,这正是我的观点。 生成的文件名的请求,但内容是用新文件名接收的。它只能通过 CF 发生。

标签: apache cdn amazon-cloudfront mod-pagespeed


【解决方案1】:

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

阿帕奇: ModPagespeedRewriteDeadlinePerFlushMs deadline_value_in_milliseconds

Nginx: pagespeed RewriteDeadlinePerFlushMs deadline_value_in_milliseconds;

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答。至少在我的情况下,这不是问题,因为我只有一台服务器......
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多