缓存服务

web缓存是位于web服务器和客户端之间的一层服务。当用户访问一个URL时,web缓存服务器会去后端web源服务器取回要输出的内容。下一个请求到来时,如果访问的是相同的URL,缓存服务器直接输出内容给客户端,而不是去源服务器取内容

proxy_cache 把 URL 及相关组合当作 Key, 用 md5 算法对 Key 进行哈希,得到硬盘上对应的哈希目录路径,从而将缓存内容保存在该目录内。目前只能对指定的URL或者状态码设置缓存过期时间

想清除指定 url的缓存,需要通过一个第三方模块:ngx_cache_purge,Nginx 无法动态加载模块,所以要使用 ngx_cache_purge 就必须在编译时就加上该模块

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxf ngx_cache_purge-2.3.tar.gz
cd nginx-1.8.0
./configure <旧的编译参数,可使用-V查看> --add-module=../ngx_cache_purge-2.3
make
/usr/local/nginx/sbin/nginx -s stop
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp ./objs/nginx /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx

假设一个url为http://www.heboan.com/test.gif,通过访问http://www.heboan.com/purge/test.gif可以清除该URL缓存

nginx配置

upstream imooc {
	server 192.168.88.2:80;
	server 192.168.88.3:80;
	server 192.168.88.4:80;

}

proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off;
	/opt/app/cache  #存放缓存文件的目录
	levels=1:2	#一般建议缓存目录按两层的目录来分级
	keys_zone=imooc_cache:10m	#imooc_cache是我定义的zone的名字,后面调用的就是这个名字
					#10m表示大小10MB,1MB大概可以存储8千个key,10m就是8万个,这个我们可以根据实际情况设置
	max_size=10g   #表示控制/opt/app/cache目录最大为多大,因为我们不可能让它无限增长,把磁盘撑满,当用满之后,nginx就会实行淘汰规则
	inactive=60m   #表示不活越的,这里的60m表示的是60分钟,表示60分钟内,如果这个缓存文件没有被访问机会被清理掉
	use_temp_path=off  #建议把临时文件关闭,如果不关闭会有一些性能损耗

server {
	listen  80;
	server_name	www.imooc.com;
	
	access_log  /var/log/nginx/imooc_proxy.access.log main;


	location ~ /purge(/.*) { #清除缓存
	allow 127.0.0.1;
	allow 192.168.1.0/24;
	deny all;
	proxy_cache_purge cache_one $host$uri$is_args$args;
	}

	location / {
		proxy_cache imooc_cache;	#表示开启前面定义的缓存imooc_cache
		proxy_pass http://imooc;	
		proxy_cache_valid 200 304 12h;	#表示状态码为200,304是12小时后过期
		proxy_cache_valid any 10m;	#除了200和304以外的是10分钟后过期
		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; 
		#当后端某一台服务器返回错误的状态信息,则跳过这台,访问其他服务器
		include proxy_params;
	}

}

  

原文地址:https://www.cnblogs.com/sellsa/p/7787780.html