Sulu 缓存总是不命中

Sulu cache always misses

我正在尝试设置缓存 Sulu CMS 页面。在本地,我已将环境设置为 prod(尝试使用 dev 但切换到 prod 以防这是问题所在),但启用了缓存调试。

config/packages/sulu_http_cache.yaml 看起来像这样:

sulu_http_cache:
    proxy_client:
        symfony:
            enabled: true
        debug:
            enabled: true

config/packages/prod/cache.yaml 看起来像这样

framework:
    cache:
        app: cache.adapter.filesystem
        system: cache.adapter.system

缓存目录存在于我的 /var 目录中,但它们是空的

所有回复都具有以下内容headers:

如果您的缓存始终未命中,则表明您正在请求中访问 session。 Symfony 中的以下内容将自动启动 session 例如:

  • 使用 csrf 令牌 (csrf_token)
  • 在路由上配置 unlazy 防火墙(检查你的 security_website.yaml
  • 正在访问即显消息或其他类似内容 (app.flashes)
  • 正在访问 session 本身 (app.session)
  • 正在访问当前用户(app.user

作为 session 访问表明“响应”是特定于用户的,并且对于每个访问者来说都不相同 symfony 会将响应设置为私有,因此它总是缓存未命中。

编辑您的代码,您不再访问 session 并且 Cache-Control Header 响应为“public”,HttpCache 组件将缓存此响应.

正如您所提到的,可以使用以下方法禁用 symfony 自动行为:

$response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 1); 

我个人会避免这种情况,因为它可以缓存特定于安全的数据,或者例如在您的 html 中写入您不想要的缓存用户名。

另一种方法是使用基于 UserContext 的缓存,这意味着例如每个角色都有自己的缓存。可以找到关于此的文档:

这个主要用在你的应用在网站上有安全性,只有特定的角色才能查看特定的路由。