关于代理缓存和etag的两个问题

来源:2-3 Nginx优势多路IO复用

烈焰卡卡

2020-06-29

老师您好,关于在proxy cache中的 etag,我有两个问题
1. 在没有slice的情况下,每个文件在nginx上被缓存时,是否会缓存后端返回的etag,这个etag是存在缓存文件中么?
2. 在有slice的情况下,我记得在http range请求中,无论请求哪个区间,返回的etag应该都是一样的。那么假设有一个文件,会被slice成2个分片,分片1现在被缓存在nginx中,他记录的文件etag为a。现在后端文件更新了,文件的etag变成了b,这时候客户端再请求该文件时,请求分片1中的内容会被返回刚才缓存的部分,分片2中的内容由于没有被缓存会去后端获取到最新的文件内容,那么这种数据不一致的情况ngimx是否会出现,又是如何避免的?

写回答

1回答

Jeson

2020-07-02

你好!

理解不太正确

1、 etag是客户端缓存存,它 是计算 Last-Modified 与 Content-Length,Last-Modified是文件更改时间戳而Content-Length是文件大小计算得到。

2、如果nginx端的静态缓存,那就是file cache ,这里机制不一样的。

3、如果是proxy_cache,那么主要是基于proxy_cache_key维度来作,如:

            proxy_cache_key $host$uri$is_args$args;

0
2
Jeson
回复
烈焰卡卡
Last-Modified修改了,etag不一致,实现机制重新按照缓存文件更新进行重新获取元素。
2020-07-02
共2条回复

Nginx入门到实践-Nginx中间件应用+搭建Webserver架构

中间件、负载均衡、应用层安全防护、动静分离、Nginx+LUA开发等

4183 学习 · 908 问题

查看课程