Nginx缓存:如何根据请求日期到期/变化

时间:2016-10-08 20:25:15

标签: caching nginx http-headers

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

我可以在内容上设置vary http标头(由上游服务器设置)吗?

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

2 个答案:

答案 0 :(得分:1)

您需要添加“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;

这样内容就会在午夜过期。

答案 1 :(得分:0)

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

有关选项的讨论,请参阅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中进行时间计算,并将其设置为过期使用的ngx变量。