V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
Snitchley
V2EX  ›  NGINX

NGINX 缓存过期太早?

  •  
  •   Snitchley · 2016-08-12 20:07:33 +08:00 · 4198 次点击
    这是一个创建于 3016 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原始站点的静态文件的 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.*,会是哪些方面的原因呢?

    7 条回复    2019-01-28 14:15:39 +08:00
    tumb8r
        1
    tumb8r  
       2016-08-12 20:13:12 +08:00 via iPhone
    expires 30d;
    Snitchley
        2
    Snitchley  
    OP
       2016-08-12 20:20:12 +08:00
    @tumb8r 你的意思是说,只有 proxy_cache_valid 200 301 302 7d; 还不够,还要同时加上相同时间的 expires 7d; ?
    tumb8r
        3
    tumb8r  
       2016-08-12 20:27:48 +08:00 via iPhone
    @Snitchley expires 30d;这个才是设置缓存过期时间的
    AntonChen
        4
    AntonChen  
       2016-08-12 20:36:33 +08:00 via iPhone
    楼主设置的是反向代理在 nginx 上缓存的缓存时间,而非客户端
    Snitchley
        5
    Snitchley  
    OP
       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
        6
    millken  
       2016-08-24 10:58:56 +08:00
    可能是 cache zone 设得太小导致 nginx 使用 LRU 淘汰了以前的一些缓存。
    zktz
        7
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5686 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:38 · PVG 09:38 · LAX 17:38 · JFK 20:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.