Nginx作为缓存服务
标签:Nginx

Nginx作为缓存服务

1.基本概念

第一次没有数据,Nginx要去服务端请求,后面再次请求就不需要了,直接从Nginx返回。

语法

proxy_cache配置语法

Syntax:	proxy_cache zone | off;
Default:	proxy_cache off;
Context:	http, server, location

缓存过期周期:

Syntax:	proxy_cache_valid [code ...] time;
Default:	—
Context:	http, server, location

缓存的维度:

Syntax:	proxy_cache_key string;
Default:	proxy_cache_key $scheme$proxy_host$request_uri;
Context:	http, server, location

3. 测试

Step 1:在虚拟机中新建cache_test.conf

    upstream myalicentos {
        server 47.94.254.242:8001;
        server 47.94.254.242:8002;
        server 47.94.254.242:8003;
    }

    proxy_cache_path /opt/app/cache levels=1:2 keys_zone=myalicentos_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen       80;
    server_name  localhost jeson.t.imooc.io;

    #charset koi8-r;
    access_log  /var/log/nginx/test_proxy.access.log  main;

    
    location / {
        proxy_cache myalicentos_cache;
        proxy_pass http://myalicentos;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        proxy_cache_key $host$uri$is_args$args;
        add_header  Nginx-Cache "$upstream_cache_status";  
        
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        include proxy_params;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

里面的

proxy_cache_path /opt/app/cache:缓存存放的目录

levels=1:2:缓存目录的分级,按照两层目录分级

keys_zone=myalicentos_cache:10m :表示我们开辟的zone空间的名字,后面的location就会调用这个,10m表示大小,一般1m表示可以存放8000个key

max_size=10g:表示目录最大的大小为10G

inactive=60m:表示60分钟内缓存文件没有被访问过的话就被清理掉

use_temp_path=off;:用来存放临时文件的,一般关闭

proxy_cache myalicentos_cache;:和前面的定义的zone空间名一致,表示我们已经开启了缓存,如果为off,表示没有开启。

proxy_pass http://myalicentos;:还是利用代理的方式访问

proxy_cache_valid 200 304 12h;:表示对返回200和304的我们设置12小时候过期

proxy_cache_valid any 10m;:对于除了200和304以为的,10m分钟过期

proxy_cache_key $host$uri$is_args$args;:重新设置缓存的key

add_header Nginx-Cache "$upstream_cache_status";:新增一个头信息

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;:表示后端返回500、502、503、504的时候,跳过该服务器,去访问下一台服务器

Step 2:在阿里云服务器上配置server1.conf

server {
    listen       8001;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/log/server1.access.log  main;

    location / {
        root   /opt/app/code1;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504 404  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

同理再配置两台8002和8003的

Step 3:结果

这个时候我们刷新的时候,没有进行轮询,而是只是显示同一个页面。因为缓存已经生效了。

3. 其他

清理指定缓存

**如何让部分页面不缓存 **

Syntax:	proxy_no_cache string ...;
Default:	—
Context:	http, server, location

if($request_uri ~ ^/(login/register/password\/reset)){ #指定这些路径不缓存
    set $cookie_nocache 1;
}
location /{
    proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; #在location添加这一句话
}
  • 4 min read

CONTRIBUTORS


  • 4 min read