回答
收藏
分享
举报
指令proxy_cache_valid指令问题
提问于2021-01-07 15:07

浏览 1.2k

在配置缓存的时候,第一次我没有配置proxy_cache_valid,结果发现本地没有生产缓存文件。每次请求都需要从上游服务器获得。

配置了proxy_cache_valid any 30m;以后问题得到解决。

请问,1, 这个proxy_cache_valid指令是用来做什么的?为什么不使用这条指令nginx不生产缓存文件?

            2  , 这条指令后面的时间参数是用来控制什么的? 和proxy_cache_path中的invalid参数有什么不同?

多谢!

已修改于2023-03-03 14:56



写下您的回答
发表回答
全部回答(1)

按点赞数排序

按时间排序

proxy_cache_valid用来匹配上游HTTP响应是否使用缓存的2个条件:

1、HTTP响应码,比如是否缓存404响应;

2、当上游响应中未携带cache-control、expires头部时,缓存将使用它后面的时间作为过期时间。

proxy_cache_path定义的淘汰时间,即到达后立刻删除,而过期时间只是资源过期,缓存不会立刻删除。 

赞同

0

回复举报

回答于2021-01-07 15:47



回复陶辉
回复
Rockets回复了

多谢陶老师,那么当上游响应中携带了cache-control、expires等头部时,不使用proxy_cache_valid指令NGINX也会保存缓存文件,对吗?

0

回复举报

回答于2021-01-07 08:21



回复Rockets
回复
陶辉回复了Rockets

必须设置它,因为它还有response code的功能,但后面的过期时间会被头部的值覆盖。

0

回复举报

回答于2021-01-07 08:22



回复陶辉
回复
Rockets回复了陶辉

再追问一句,如果我们设置了proxy_cache_valid 200 30s。那么30s的时间可能会被response头部的时间覆盖。同时所有的非200的上游响应NGINX都不会缓存,只有200的响应会被缓存,这样对吗?


0

回复举报

回答于2021-01-07 08:35



回复Rockets
回复
更多回复
提问者
Rockets
这家伙很懒还未留下介绍~
0
文章
10
问答
1
粉丝
相关问答

src/os/unix/ngx_files.c:404:9: error: 'pwritev' is only available on macOS 11.0 or newer [-Werror,-Wunguarded-availability-new]
n = pwritev(file->fd, vec->iovs, vec->count, offset);
^~~~~~~

 error: 'pwritev' is only available on macOS 11.0 or newer [


是不是你的macos版本太低了?


点赞 0
浏览 1k

rewrite_by_lua工作在rewrite阶段,只是改写uri,balancer_by_lua是在content阶段,在upstream流程里选择上游服务器,后者更灵活,可以自定义负载均衡算法,指定每个peer

点赞 0
浏览 780