【问题标题】:Nginx Cache: how to expire/vary by request dateNginx 缓存:如何根据请求日期过期/变化
【发布时间】:2017-02-17 14:52:54
【问题描述】:

我的内容会根据请求的日期而变化,即 在2018-09-10T00:002018-09-10T23:59 请求页面时将提供相同的内容,但在2018-09-11T00:00 将提供不同的内容(基于服务器时间)。

我可以在内容上设置一个vary http 标头来实现这一点(由上游服务器设置)吗?

或者在 nginx 中是否有另一种方法(理想情况下仅在某些路径上)?

【问题讨论】:

    标签: caching nginx http-headers


    【解决方案1】:

    通过设置缓存控制标头来控制客户端缓存。

    有关选项的讨论,请参阅http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires。可以使用 @ 前缀指定一天中的时间。因此,在服务器时间下午 3:30 设置到期时,您的配置看起来像这样:

    location ~* \.(css|js)$ {
      expires @15h30m;
      add_header Cache-Control "public";
    }
    

    如果您的内容每小时过期,您可以做一些花哨的事情,比如在 lua 中进行时间计算,并将其设置为 expire 使用的 ngx 变量。

    【讨论】:

    • 谢谢,不知怎的错过了expires的绝对值选项
    【解决方案2】:

    您需要添加一个“Expires”标头,您可以在 Nginx 或您的应用程序中执行此操作。作为示例,标题看起来像这样:

    Expires: Sun, 09 Oct 2016 23:59:59 GMT
    

    在 PHP 中,您可以使用以下命令生成:

    header('Expires: ' . gmdate('D, d M Y H:i:s', strtotime(date("Y-m-d 23:59:59"))) . ' GMT');
    

    在 Nginx 中,您只需将以下内容添加到您的位置或服务于指定内容的服务器块中:

    expires @00h00m;
    

    这样内容将在午夜过期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多