当我们访问网站的时候为了加快访问速度,减少HTTP请求,通常使用缓存,高级一点名称叫动静分离技术(中的静)。我们把不长更换的CSS、图片等等,生成缓存。

Proxy_store

Proxy_store Squid 是有区别的!! 最明显的一点在于其不具有expires,无法通过程序控制cache什么时间过期。往后要写个脚本定期删除缓存目录中的内容,不过这也正合我意。

以下是配置方式:

如果需要将文件拉到到本地,则需要增加如下几个子参数:

proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path 缓存目录;

其中:

proxy_store on 启用缓存到本地的功能,
proxy_temp_path 指定缓存在哪个目录下,如:proxy_temp_path /var/nginx_cache;

在经过上一步配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远端拉取文件,还必须增加:

if ( !-e $request_filename) {
   proxy_pass  http://192.168.10.10;
}

即改成有条件地去执行proxy_pass,这个条件就是当请求的文件在本地的proxy_temp_path指定的目录下不存在时,再向后端拉取。

整体配置例子:

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {        
           #指定缓存文件类型
            expires 7d;      #设置浏览器过期时间
            root /data/nginx_cache;         
            #静态文件根目录目录(必须对应proxy_temp_path)
            proxy_store on;        #开启缓存机制
            proxy_store_access user:rw group:rw all:rw;       #缓存读写规则
            proxy_temp_path /data1/nginx_caches;            #存放静态文件的缓存目录
            include proxy.conf;  
            # 外联proxy理的详细配置如proxy_set_header, client_max_body_size ….
            if ( !-e $request_filename) {     #正则表达式,匹配缓存目录中的文件与源文件是否存在)
                 proxy_pass  http://192.168.10.10   # PHP 应用的服务器地址
            }
        }

proxy_cache缓存

upstream dd{
  server 192.168.100.11:8001;
  server 192.168.100.11:8002;
  server 192.168.100.11:8003;
}

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

server{
   listen  80;
   server_name www.solo365.cn;
   access_log  /var/log/nginx/access.log;
  
   location /{
   proxy_cache dd_cache;
   proxy_pass http://dd;
   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_upsteam error timeout invalid_header http_500 http_502 http_503 http_504;
   include proxy_params;
}

  } 
  

}

levels=1:2 代表目录结构,两层分级。

keys_zone是开辟缓存空间的名字,keys_zone=solo_cache:10m代表keys空间大小

max_size=10g代表最大目录空间,用慢后会自动清理。

inactive=60m 代表60分钟内没有访问缓存会进行清理

use_temp_path=off; 关闭比较好

proxy_cache_valid 200 304 他们缓存12h;

proxy_next_upsteam error timeout invalid_header http_500 http_502 http_503 http_504 当我们的负载均衡服务器 返回500 502 跳转下一台服务器。

清理指定缓存

第三方扩展模块: ngx_cache_purge

让页面不缓存。

proxy_no_cache 
作用域:http,server,location
server{

   if($request_uri ~^/(url|login|register|password\/reset)){
     
     set $cookie_nocache 1;
   }

   location /{
   proxy_cache solo_cache;
   proxy_pass  http://dd;
   proxy_cache_key $host$uri$is_args$args;
   proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
   proxy_no_cache $http_pragma $http_authorizationl
   add_header Nginx-Cache "$upstream_cache_status";
   
   

  }
}
Last modification:January 5, 2020
如果觉得我的文章对你有用,请随意赞赏