Advertisement

nginx expires 缓存

阅读量:

本文专门讨论nginx expires设置的相关知识。其中,在location /if 段里即可轻松完成缓存配置。

注:这个缓存是指针对浏览器所做的缓存,不是指服务器端的数据缓存.

下面就以具体的示例网站,针对该示例网站做实验。

常见缓存技术用于存储那些不频繁变化的内容的一种技术手段

ok,请问我们这边是否已经配置 nginx 的缓存机制?以便让浏览器在一个星期内不再重复获取图片内容。

我们先看下,在没做缓存配置前的一个浏览器请求响应头信息:

注释:目前/nginx服务器上已经设置了虚拟主机,并将其相关的配置信息独立地放置到了vhosts目录中。因此,在进行后续操作时,请注意以下几点:如果将这些设置直接复制到nginx.conf文件中同样适用(前提是设置必须正确)。

配置如下:

复制代码
 location ~* \.(jpg|jpeg|gif|png){

    
  
    
     root       /data/www/OneGame/public ;
    
     expires 7d;
    
  
    
 }

该配置指定:**在/data/www/OneGame/public 文件夹下以.jpg、.png、.gif、.jpeg(case-insensitive)文件类型(iB4)为后缀的所有文件进行7天的缓存。

以下是我配置文件完整内容:

让nginx 重新载入配置

复制代码
    nginx -s reload

然后强制刷新访问示例网站,查看一下图片的请求响应头信息。

观察到响应头信息中新增了一个Cache-Control字段,并且其值为(3600 × 24 × 7)秒,这表明缓存时长为一周。

再次刷新(非强制刷新)查看浏览器请求响应头信息

在非强制刷新的情况下,状态码304的数据浏览器不再主动向服务器发送请求。

其核心在于:当浏览器首次访问资源时, 服务器会返回包含 ETag 验证令牌、Last-Modified 时间、Cache-Control: max-age 值等信息的响应. 在进行第二次请求时, 浏览器应在 HTTP If-None-Match 头部携带相应的 ETag 验证令牌. 服务器接收到此请求后, 根据当前请求资源检查携带的 ETag 验证令牌是否未变化. 如果验证通过, 服务器将返回 "304 Not Modified" 响应, 表示缓存中的响应内容未发生变更, 可继续使用 Cache-Control: max-age 值指定的缓存期限而不进行重新下载. 这种机制有效减少了网络传输的时间和带宽消耗.

所有来自浏览器的 HTTP 请求将首先被路由至缓存层以便验证是否存在能够有效回应该请求的内容。 若发现存在匹配内容则系统将调用相应服务获取具体响应避免因网络延迟而产生的额外费用与流量消耗。

涉及HTTP缓存技术的进一步优化与提升内容,请参考https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=zh-cn这一资源。

全部评论 (0)

还没有任何评论哟~