nginx-3.客户端协商缓存 强制缓存 代理缓存(CDN加速)
nginx客户端协商缓存
用nginx作为静态资源服务器,默认就走的协商缓存,同一个资源再次访问状态码是304
location / {
root html;
add_header aaaaa 11111;
autoindex on;
}
多次访问http://192.168.100.66/50x.html的结果

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

修改50x.html后再访问

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

点击跳转:协商缓存过程详解
nginx客户端强制缓存
在放回的响应头指定了这个文件缓存一定时间,如果客户端浏览器是默认设置,那么指定时间内就会从客户端浏览器缓存中读取文件
location / { #location里面是虚拟主机映射的位置,/表示所有
root html; #静态文件目录
expires 24h; #使用强制缓存
}
通过地址点击:1.png
200 from disk cache 就是走的本地缓存,nginx访问记录里面也没有,max-age=86400 就是24h

强制缓存需要连接跳转才有小欧,如果是浏览器里面直接输入地址这样只会走协商缓存。有些时候即便没有配置强制缓存,只有协商缓存浏览器也会走强制缓存。
强制缓存服务器端没有记录,浏览器状态码是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; # 代理转发
}
}
代理缓存配置
-
定义代理缓存
-
proxy_cache_path 定义缓存
注意定义代理缓存实在http下面定义的语法:proxy_cache_path path [level=levels] ...可选参数省略,下面会详细列举 默认值:proxy_cache_path off 上下文:http参数含义:
- path 缓存文件的存放路径;
- level path的目录层级;
- keys_zone 设置共享内存;
- inactive 在指定时间内没有被访问,缓存会被清理,默认10分钟;
-
-
使用代理缓存
-
proxy_cache 指定使用前面定义的代理缓存的名字,可以在 http,server,location三个级别使用
语法:proxy_cache zone | off ; #zone是缓存的名字 默认值:proxy_cache off; 上下文:http、server、location -
proxy_cache_key 缓存key,命中缓存的标致,一般都是资源的uri
语法:proxy_cache_key 默认值:proxy_cache_key $scheme$proxy_host$request_uri; 上下文:http、server、location -
proxy_cache_valid 指定什么状态的返回值才会被缓存(一般成功的我们才会缓存)
语法:proxy_cache_valid [code...] time; 上下文:http、server、location 配置示例:proxy_cache_valid 200 304 2m;; # 说明对于状态为200和304的缓存文件的缓存时间是2分钟 -
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;
-
-
$upstream_cache_status 变量
它存储了缓存是否命中的信息,会设置在响应头信息中,在调试中非常有用。MISS: 未命中缓存 HIT: 命中缓存 EXPIRED: 缓存过期 STALE: 命中了陈旧缓存 REVALIDDATED: Nginx验证陈旧缓存依然有效 UPDATING: 内容陈旧,但正在更新 BYPASS: X响应从原始服务器获取
能耍的时候就一定要耍,不能耍的时候一定要学。
--天道酬勤,贵在坚持posted on 2024-01-24 01:29 zhangyukun 阅读(309) 评论(0) 收藏 举报
浙公网安备 33010602011771号