NGINX 缓存过期太早?

2016-08-12 20:07:33 +08:00
 Snitchley

原始站点的静态文件的 HTTP Response Headers 里没有 Expires 和 Cache-Control ,于是在代理的时候指定了 7 天的缓存:

location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml|txt|pdf)$ {
    proxy_pass_header Server;
    proxy_http_version 1.1;

    proxy_set_header Connection "";

    set $cache_key_scheme $scheme;

    set $cache_key $cache_key_scheme://$host$uri$is_args$args;

    proxy_set_header Host static.example.com;

    proxy_cache c1;

    proxy_cache_key $cache_key;

    proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
    proxy_cache_valid 200 301 302 7d;

    proxy_cache_valid 403 404 500 0s;

    add_header X-Cache-Status "$upstream_cache_status";
    
    proxy_pass http://origin_http;
}

但是测试的时候发现,才过了几分钟就会看到 X-Cache-Status 的值是 EXPIRED

NGINX 版本是 1.11.*,会是哪些方面的原因呢?

4093 次点击
所在节点    NGINX
7 条回复
tumb8r
2016-08-12 20:13:12 +08:00
expires 30d;
Snitchley
2016-08-12 20:20:12 +08:00
@tumb8r 你的意思是说,只有 proxy_cache_valid 200 301 302 7d; 还不够,还要同时加上相同时间的 expires 7d; ?
tumb8r
2016-08-12 20:27:48 +08:00
@Snitchley expires 30d;这个才是设置缓存过期时间的
AntonChen
2016-08-12 20:36:33 +08:00
楼主设置的是反向代理在 nginx 上缓存的缓存时间,而非客户端
Snitchley
2016-08-12 20:43:19 +08:00
在 Server Fault 上找到了一个接近的问题:

http://serverfault.com/questions/744969/nginx-proxy-cache-expires-too-soon

但是我遇到的问题是源站根本就没有 Expires 或者 Cache-Control 的情况下,缓存依然几分钟就过期了。
millken
2016-08-24 10:58:56 +08:00
可能是 cache zone 设得太小导致 nginx 使用 LRU 淘汰了以前的一些缓存。
zktz
2019-01-28 14:15:39 +08:00
@millken 我今天也遇到这个问题了。
proxy_cache_path /docker_data/cache/ levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=365d;

实际上感觉还是没几分钟就 Nginx-Cache: EXPIRED

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/298961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX