AI编程社区 nginx-3.客户端协商缓存 强制缓存 代理缓存(CDN加速)

nginx-3.客户端协商缓存 强制缓存 代理缓存(CDN加速)

胡匪  ·  2024-08-22 04:29:31 发布

nginx客户端协商缓存

用nginx作为静态资源服务器,默认就走的协商缓存,同一个资源再次访问状态码是304

location / {
            root  html;
            add_header aaaaa 11111;
            autoindex on;
        }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

多次访问http://192.168.100.66/50x.html的结果

nginx-3.客户端协商缓存 强制缓存 代理缓存(CDN加速)_nginx

访问日志:状态204 文件大小0

nginx-3.客户端协商缓存 强制缓存 代理缓存(CDN加速)_缓存_02

修改50x.html后再访问

nginx-3.客户端协商缓存 强制缓存 代理缓存(CDN加速)_nginx_03

nginx访问日志 200,文件大小 498

nginx-3.客户端协商缓存 强制缓存 代理缓存(CDN加速)_缓存_04

点击跳转:协商缓存过程详解

nginx客户端强制缓存

在放回的响应头指定了这个文件缓存一定时间,如果客户端浏览器是默认设置,那么指定时间内就会从客户端浏览器缓存中读取文件

location / {                           #location里面是虚拟主机映射的位置,/表示所有
            root   html;                       #静态文件目录
            expires 24h;                       #使用强制缓存
        }
  • 1.
  • 2.
  • 3.
  • 4.

通过地址点击:1.png

200 from disk cache 就是走的本地缓存,nginx访问记录里面也没有,max-age=86400 就是24h

nginx-3.客户端协商缓存 强制缓存 代理缓存(CDN加速)_缓存_05

强制缓存需要连接跳转才有小欧,如果是浏览器里面直接输入地址这样只会走协商缓存。有些时候即便没有配置强制缓存,只有协商缓存浏览器也会走强制缓存。

强制缓存服务器端没有记录,浏览器状态码是200 from disk

协商缓存服务器端有记录,浏览器状态码304,服务器不会真实的返回文件,返回的空文件

nginx代理缓存

效果类似CDN加速,nginx本地缓存了上游代理服务器的资源

下面定义了一个缓存名字是cache_zone的代理缓存,缓存目录在 /etc/nginx/cache_temp

#定义代理缓存缓存路径,层级,缓存名字时间,缓存大小
proxy_cache_path /etc/nginx/cache_temp levels=2:2 keys_zone=cache_zone:30m max_size=2g inactive=60m use_temp_path=off;

#指定上级代理服务器地址
upstream cache_server{
  server 121.42.11.34:1010;
  server 121.42.11.34:1020;
}

server {
  listen 80;
  server_name cache.lion.club;
  location / {
    proxy_no_cache $cache_name; # 那些值不缓存false或者非空就不缓存
    proxy_cache cache_zone; # 指向定义的缓存名字,上面配置中已经定义好的
    proxy_cache_valid 200 5m; # 缓存状态为200的请求,缓存时长为5分钟
    proxy_cache_key $request_uri; # 缓存文件的key为请求的URI
    add_header Nginx-Cache-Status $upstream_cache_status # 把缓存状态设置为头部信息,响应给客户端
    proxy_pass http://cache_server; # 代理转发
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
代理缓存配置
  • 定义代理缓存
  • proxy_cache_path 定义缓存
    注意定义代理缓存实在http下面定义的
语法:proxy_cache_path path [level=levels] ...可选参数省略,下面会详细列举

默认值:proxy_cache_path off

上下文:http
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

参数含义:

  • path 缓存文件的存放路径;
  • level path的目录层级;
  • keys_zone 设置共享内存;
  • inactive 在指定时间内没有被访问,缓存会被清理,默认10分钟;
  • 使用代理缓存
  • proxy_cache 指定使用前面定义的代理缓存的名字,可以在 http,server,location三个级别使用
语法:proxy_cache zone | off ; #zone是缓存的名字

默认值:proxy_cache off;

上下文:http、server、location
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • proxy_cache_key 缓存key,命中缓存的标致,一般都是资源的uri
语法:proxy_cache_key

默认值:proxy_cache_key $scheme$proxy_host$request_uri;

上下文:http、server、location
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • proxy_cache_valid 指定什么状态的返回值才会被缓存(一般成功的我们才会缓存)
语法:proxy_cache_valid [code...] time;

上下文:http、server、location

配置示例:proxy_cache_valid 200 304 2m;; # 说明对于状态为200和304的缓存文件的缓存时间是2分钟
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • proxy_no_cache 那些东西不缓存,proxy_cache 指定当前于开启缓存,proxy_no_cache 排除部分资源。
  • proxy_cache_bypass 指定符合条件的就穿透缓存,不符合的就从缓存取
语法:proxy_cache_bypass string;

上下文:http、server、location

示例:proxy_cache_bypass $http_pragma    $http_authorization;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • $upstream_cache_status 变量
    它存储了缓存是否命中的信息,会设置在响应头信息中,在调试中非常有用。
MISS: 未命中缓存
HIT: 命中缓存
EXPIRED: 缓存过期
STALE: 命中了陈旧缓存
REVALIDDATED: Nginx验证陈旧缓存依然有效
UPDATING: 内容陈旧,但正在更新
BYPASS: X响应从原始服务器获取
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
原创作者: u_15958225 转载于: https://blog.51cto.com/u_15958225/11802508
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐

  • 浏览量 240
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献42条内容