nginx中永久缓存以及临时缓存

           最近线上的系统采用NGINX代理服务器========>web应用服务器,访问很慢,于是乎就想想做个缓存文件都放在缓存中这样,在访问服务器的时候不就阔以减少对后台的访问了吗,同时还能降低服务器的压力,键值一举两得,废话说完了,准备开干:

      NGINX缓存方式有两种:一种是永久性的缓存;

                                               这种缓存若不手动删除,该缓存文件会一直生效,因此,永久缓存只是用于缓存网站中几乎不会更改的内容;

                                             二临时缓存;

                                             这种缓存是根据请求连接进行哈希后,根据具体配置生成缓存文件目录,保存响应的数据,这个缓存的内容是可以删除的哦,具体时间自己可以设置;

准备工作:

两台服务器:一台NGINX缓存服务器,地址:172.16.10.52  一台作为web内容服务器,地址:172.16.10.17

第一种永久性缓存  

在NGINX缓存服务器,添加代码

代码如下

         

 location / {
             if (!-e $request_filename) {
                  proxy_pass http://172.16.10.17;
                  }
             root /opt/chachan/store;
             proxy_store on;
             proxy_store_access user:rw group:rw all:r;
             proxy_temp_path cache_tmp;
             proxy_set_header x-real-ip $remote_addr;
             proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
   }

解释:

       if(!-e $request_filename)中的内容是半段缓存目录中的文件,目录或符号链接是否存在,不存在则直接从后台web内容服务器调取;

      root 行指定缓存文件的保存目录

       proxy_store on 开启本地缓存

       proxy_store_access 设置缓存的读写规则

       proxy_temp_path 设置反向代理接受的数据临时存储文件的目录,配置生效时候会自动创建

这样保存退出重启下NGINX,永久缓存完成了,是不是很简单nginx中永久缓存以及临时缓存_第1张图片

从图中可以看到缓存文件已经生成了,主要是一些HTML和jpg文件;

感兴趣的童鞋可以自己搭建一个;

临时缓存配置

临时缓存需要配置两块区域分别是

NGINX缓存服务器的http区域

同样的先复制代码:


 proxy_temp_path /usr/local/nginx/proxy_temp_dir;
 proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=800m;

        解释:proxy_temp_path 代理临时目录

                   proxy_cache_path 缓存目录和参数设置

                                                 第一个路径表示自定义的缓存文件保存目录

                                                  level 参数边表示缓存目录下的层次目录结构

                                                 key_zone指定缓存区名称和大小

                                                 inactive 清空在指定时间内未被访问的内容

NGINX缓存服务器的server块代码:

server {

listen 80;
server_name default_server;
#index index.htm index.html index.php;
#root /chanchan.site/webroot;
       location ~ /purge(/.*) {
           proxy_cache_purge cache_one $1$is_args$args;
           allow 127.0.0.1;
           allow 172.16.10.0/24;
           deny all;
        }
        
        add_header X-Via $server_addr;
        add_header X-Cache $upstream_cache_status;
      
        location / {
           proxy_cache cache_one;
           proxy_cache_key $uri$is_args$args;
           proxy_cache_valid 200 12h;
           proxy_cache_valid 304 12h;
           proxy_cache_valid 301 302 1d;
           proxy_cache_valid any 1m;
           proxy_pass http://172.16.10.17;
           expires 30d;
        }
}

解释:location /段

                 proxy_cache 缓存区名称

                 proxy_cache_key 设置hash的key值组成规则

                 proxy_cache_valid 对不同的HTTP状态码设置不同的缓存时间 (d 天  m 分钟   h 小时)

                  proxy_pass 后面为做处理的都被转到代理服务器上面

                 add_header  在响应头中添加两个标识,用来测试

nginx中永久缓存以及临时缓存_第2张图片

如图到这一步骤,临时缓存已经搭建完毕;

        细心的童鞋已经发现我贴出的代码还含有purge,purge这个模块又是干啥的捏?

       比如,当有时候我们的内容服务器要更新网页的图片什么的,为啥我上传到web内容服务器后访问还是原来的页面,完全没生效捏,答案肯定是有缓存了,如果是每次我都要登录服务器手动删除太繁琐了

       如果服务器托管在数据中心,又是设置了不允许远程登录是不是很蛋疼呢,每次都要跑过去删除缓存在跑回来;

       purge模块的作用:用于清除指定url的缓存

                  解释:

                      proxy_cache_purge   清理的缓存模块

                     allow 允许指定的机器访问;

                     deny 拒绝访问;

配置完成后 重启NGINX使之生效;   

测试:

nginx中永久缓存以及临时缓存_第3张图片

开始清理缓存:

nginx中永久缓存以及临时缓存_第4张图片

                  

有的童靴可能在浏览器中看到的还是之前的图片,要记得在第二部清理完缓存数据后在把浏览器的缓存也清理一下哦,这样就出来了!

 

 

参考文件:https://blog.csdn.net/dengjiexian123/article/details/53386586

                  https://www.cnblogs.com/Eivll0m/p/4921829.html

 

 

你可能感兴趣的:(y运维资料)