L:99
nginx缓存 : 定义存放缓存的载体
proxy_cache 指令
Syntax: | proxy_cache |
---|---|
Default: |
proxy_cache off; |
Context: | http , server , location |
proxy_cache_path 指令 定义磁盘哪个位置存放缓存文件
Syntax: | proxy_cache_path |
---|---|
Default: | — |
Context: | http |
proxy_cache_path 指令参数详解
path : 定义缓存文件的存放位置
levels :定义缓存路径的目录层级,最多3级,每层目录长度为1或2字节
use_temp_path:如果设置on时,文件会放到proxy_temp_path定义的临时目录
如果设置off时 ,文件就会存放到默认的proxy_cache_path目录
keys_zone:name是共享内存的名字,由proxy_cache指令使用
size 是指共享内存大小,1mb大约可以存放8000个key
inactive :在inactive时间内没有被访问的缓存会被淘汰掉 默认10分钟
max_size:设置最大的缓存文件大小,超出后由cache manager进程按LRU链表淘汰
manager_file :cache manager 进程在1次淘汰过程中,淘汰的最大文件数 默认100
manager_sleep :执行一次淘汰循环后 cache manager进程的休眠时间 默认200毫秒
manager_threshold :执行一次淘汰循环的最大耗时 默认50毫秒
loader_files : cache_loader 进程载入磁盘中缓存至共享内存,每批最多处理的文件数 默认100
loader_sleep : 执行一次缓存文件至共享内存后,进程休眠时间 默认200毫秒
loader_threshold : 每次载入缓存文件至共享内存的最大耗时 默认50毫秒
缓存关键字
Syntax: | proxy_cache_key |
---|---|
Default: |
proxy_cache_key $scheme$proxy_host$request_uri; |
Context: | http , server , location |
缓存的响应
Syntax: | proxy_cache_valid [ |
---|---|
Default: | — |
Context: | http , server , location |
对不同的响应码缓存不等的时长
如 : code 404 5m;
标识时间
仅对以下响应缓存
200、301、302
通过响应头部控制缓存时长
X-Accel-Expires 单位秒
值为 0 时 禁止nginx缓存内容
可以通过 @设置缓存到某一个个时刻
响应头若含有 Set-Cookie则不缓存
响应头含有Vary:*则不缓存
设置那些内容不使用缓存
Syntax: | proxy_no_cache |
---|---|
Default: | — |
Context: | http , server , location |
如:proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;
当相应值为真 就不使用缓存内容
Syntax: | proxy_cache_bypass |
---|---|
Default: | — |
Context: | http , server , location |
更变HEAD方法
Syntax: | proxy_cache_convert_head |
---|---|
Default: |
proxy_cache_convert_head on; |
Context: | http , server , location |
Upstream_cache_status变量与值说明
Miss : 为命中缓存
HIT : 命中缓存
EXPIRED : 缓存已经过期
STALE : 命中了陈旧的缓存
UPDATING : 内容陈旧,但正在更新
REVALIDATED : nginx验证了陈旧的内容依然有效
BYPASS : 响应是从原始服务器获得的
HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Fri, 08 Mar 2019 10:23:45 GMT
Content-Type: text/plain
Content-Length: 6
Connection: keep-alive
Last-Modified: Wed, 13 Feb 2019 09:03:32 GMT
ETag: "5c63dd64-6"
X-Cache-Status: HIT
Accept-Ranges: bytes
代码演示下游服务器代码示列:
proxy_cache_path /data/tmpcache levels=2:2 keys_zone=two:10m loader_threshold=300 loader_files=200 max_size=200m inactive=1m; server { server_name shop**.com.cn; root html/;
error_log logs/cacherr.log debug; #打开DEBUG日志能实时看查看问题
location /{ proxy_cache two; #用了 上面的keys_zone定义的two 并且缓存10分钟 proxy_cache_valid 200 1m; #如果是响应码200 则是1分钟有效期 add_header X-Cache-Status $upstream_cache_status; #这里添加了个头 值就是前面介绍缓存状态值 proxy_pass http://192.168.0.51:8012;; } }
针对这个上游服务器代码不阐述了就简单 配置个1.txt能访问的静态文件即可
我们演示个请求
curl http://shop***.com.cn:8080/1.txt -I
我们看下返回的头
HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Sat, 09 Mar 2019 06:38:56 GMT
Content-Type: text/plain
Content-Length: 6
Connection: keep-alive
Last-Modified: Wed, 13 Feb 2019 09:03:32 GMT
ETag: "5c63dd64-6"
X-Cache-Status: MISS #这个就是我们在location 放的头部 值为缓存状态
Accept-Ranges: bytes
再次请求 curl http://shop***.com.cn:8080/1.txt -I
HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Sat, 09 Mar 2019 06:39:00 GMT
Content-Type: text/plain
Content-Length: 6
Connection: keep-alive
Last-Modified: Wed, 13 Feb 2019 09:03:32 GMT
ETag: "5c63dd64-6"
X-Cache-Status: HIT #我们发现 值边了 处于hit 命中状态 说明已经用的是缓存了
Accept-Ranges: bytes
所有缓存文件否存放在 /data/tmpcache 这个目录下
我们针对上游服务器也可以如下配置
server { listen 8012; default_type text/plain; root html; add_header X-Accel-Expires 3;#配置3秒钟缓存过期
add_header Vary *; #表示不做缓存 怎么访问都是MISS
add_header Cache_Control 'max-age=3,state-while-revalidate=3'; #类似Vary * 也表示不做缓存 location / { } }