nginx 缓存使用


nginx 缓存使用

              

        

***********************

永久缓存:除非手动删除,否则永远有效

           

**************

配置文件

             

default.conf

    location / {
        proxy_store on;                                 #开启永久缓存
        root   /usr/share/nginx/cache;                  #缓存存储目录,手动创建,user:nginx,group:root
        
        proxy_temp_path /usr/share/nginx/cache_temp;    #缓存临时存储目录,自动创建
        proxy_store_access user:rw group:rw all:r;

        if (!-e $request_filename) {                    #如果缓存中没有,则从代理中查询
           proxy_pass http://192.168.57.10:8080;
        }
    }

              

**************

应用:hello-world

             

@RestController
public class HelloController {
 
    @RequestMapping("/hello")
    public String hello(){
        return "hello world";
    }
 
}

            

**************

创建容器

          

docker run -it -d --net fixed3 --ip 192.168.57.10 \
-v /usr/nginx/test/hello-world.jar:/usr/local/app.jar \
--name hello-world common

docker run -it -d --net fixed3 --ip 192.168.57.11 \
-v /usr/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf --name nginx nginx

            

**************

测试输出

          

192.168.57.11:80/hello

      

           

nginx中的缓存:hello ==》 hello world

      

          

         

***********************

临时缓存:缓存设置有效期, 一段时间后自动删除缓存

         

**************

配置文件

       

nginx.conf

user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
 
    #gzip  on;

    proxy_cache_path /usr/share/nginx/cache levels=1:2 keys_zone=cache_one:50m inactive=1m max_size=500m;
    include /etc/nginx/conf.d/*.conf;
}

          

proxy_cache_path:设置缓存目录,在http模块中设置,location中设置会报错

/usr/share/nginx/cache:缓存存储目录

levels=1:2:从url hash值的尾部截取,最后1个字符为一级目录,往前2个字符为二级目录

keys_zone=cache_one:50m:缓存区的名称,大小为50m

inactive=1m:主动清空在1m内未使用的缓存

max_size=500m:磁盘空间大小为500m

         

        

default.conf

server {
    listen       80;
    server_name  localhost;

    add_header X-via $server_addr;                    #代理服务器的ip地址
    add_header X-cache-status $upstream_cache_status; #缓存状态
 
    location / {
        proxy_cache cache_one;                        #缓存区的名称
        proxy_cache_key $host-$uri-$is_args-$args;    #缓存key值,$host:主机名,$uri:请求地址,$is_args:是否含有参数,若有则为?,没有则为空,$args:参数,没有则为空

        proxy_cache_valid 200 10m;                    #缓存有效期,200为10m
        proxy_cache_valid 304 1m;                     #缓存有效期,304为1m
        proxy_cache_valid 301 302 1h;                 #缓存有效期,301、302为1h
        proxy_cache_valid any 1m;                     #缓存有效期,其余为1m

        proxy_temp_path /usr/share/nginx/cache_temp;  #临时缓存目录

        proxy_pass http://192.168.57.10:8080;         #代理应用
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
}

             

$upstream_cache_status:请求从缓存服务器中的获取状态

HIT:缓存命中

MISS:没有缓存,请求传送到后端

Expired:缓存过期,请求传送到后端

STALE:无法从后端获取数据,返回旧的数据(proxy_cache_use_stale命令设置

BY_PASS:绕过缓存,直接去后端获取数据(proxy_cache_bypass命令设置

REVALIDATED:验证缓存是否过期(proxy_cache_revalidate命令设置

       

常用缓存命令

proxy_cache_bypass:不从nginx中获取请求缓存数据

proxy_cache_lock:是否设置缓存锁

proxy_cache_lock_timeout:缓存锁的过期时间

proxy_no_cache:什么情况不使用缓存

proxy_cache_min_uses:同意url请求多少次之后,进行缓存

proxy_cache_revalidate:缓存过期时,向后端验证缓存内容是否过期

proxy_cache_use_stale:是否使用过期的数据

        

           

**************

创建容器

          

docker run -it -d --net fixed3 --ip 192.168.57.10 \
-v /usr/nginx/test/hello-world.jar:/usr/local/app.jar \
--name hello-world common

docker run -it -d --net fixed3 --ip 192.168.57.11 \
-v /usr/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf --name nginx nginx

        

**************

测试输出

         

192.168.57.11:80/hello

         

         

         

第一次状态为miss,第二次状态为hit,表示从缓存中获取到了数据

          

查看缓存数据:c ==》7c ==》1a3e23bc13cb3468778ae0595daaa7cc

         

一级目录:c、二级目录7c、三级目录:1a3e23bc13cb3468778ae0595daaa7cc

       

               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值