nginx三大功能(之三缓存功能)

从整体来看,nginx的缓存cache总共有五种,接下来分别来介绍每一种缓存的机制以及各自的特色:css

1.传统缓存之一html

该方法是将nginx的404错误页面定位到后端,而后在使用poxy_store将后端返回的页面进行保存。java

location/{nginx

root/home/html;#主目录web

expires 1d;#网页的过时时间shell

error_page 404=200/fetch$request_uri;#404界面定向到fetch目录下数据库

}后端

location  /fetch{#404界面定向到该路径下缓存

internal;#指明该目录下不能再外部直接访问服务器

expires:1d :#网页访问过时时间

alias/home/html;#虚拟目录文件系统要和location /同样,proxy_store会将文件保存到这个目录下面

proxy_pass:http://javaDevelopment.com;#后端upstream地址,/fetch同时是一个代理

proxy_set_header Accept-Encoding'';#为了使得后端不要返回压缩的内容

proxy_store on ;#指定nginx代理返回的文件保存

proxy_temp_path /home/tmp;#临时目录,该目录必定要和/home/html放到同一磁盘分区中

}

使用的时候还要确保nginx要有权限在/home/tmp和/home/html下面有写入文件的权限,直接使用chmod 777进行受权便可。

2.传统缓存之二

原理同上,可是使用更简洁一些,以下:

location /{

root/home/html;

proxy_store on;

proxy_set_header  Accept-Encoding'';

poxy_temp /home/tmp;

if(!-f $request_filename)

    {

proxy_pass http://javaDevelopMent.com;

    }

}

该配置属性代码比较少,使用!-f来判断请求的文件系统上存不存在,若是不存在就使用proxy_pass到后端去,一样返回的是proxy_store保存。

该两种方式有着一样的优缺点:

缺点1:不支持带参数的动态连接,同时也不支持一级目录和二级目录同时缓存,nginx会把二级目录认为跟一级目录是同一个连接,因此会保存失败,在这种状况下都须要写rewrite才能正确保存。

缺点2:nginx内部没有缓存过时和任何清理的任何机制,这些缓存的文件将永远的保存在服务器上。若是不及时的清理,必定程度上硬盘中将没法存储多的文件,须要写shell脚本进行定时的清理。

缺点3:nginx服务器上智能缓存status为200的,后端返回的301,302,404状态的都不会缓存。

缺点4:nginx不会自动选择内存或硬盘做为存储介质,一切有配置决定。

3.基于memcached

nginx对memcached也会支持

location  /mem/{

if ($uri~"^/mem/([0-9A-Za-z_]*$)"){

set $memcached_key "$1";

memcached_pass 192.168.9.12:11211

}

expires 120;

}

该配置会将http://javaDevelopMent.com/mem/java指明到memcached的java这个key去取数据

nginx目前没有写入memcached的任何机制,所以要往memcached中写入数据须要用动态语言来完成,可使用404定向到后端写入数据中。

4.基于第三方插件ncache

ncache是基于web服务器模型构建起来的缓存系统,属于sina公司的开源产品。

起初的目的是为了提高缓存响应速度而开发的,而squid(磁盘缓存)的速度比较慢,ncache的优点就在于此。

ncache最先的时候是做为nginx的一个HTTP模块进行开发的,由于考虑到其以后的兼容性和可扩展性,做为更好的独立模块,能够普遍的推广和使用。但后来随着功能的扩充,代码的增多,nginx原有的框架异能不能知足开发中的需求,所以采用提取nginx内部核心代码,并把cache部分嵌入其中,就造成了今天的ncache。

ncache彻底是一套定制化的产品,能够知足快速部署、简单易用,高并发、大存储量的需求,它不须要复杂的配置。

直接安装便可。

运行ncache的命令

/usr/local/webserver/nacahe/sbin/nginx

中止nacahe命令

killall -9 nginx

查看ncache状态

curl  "http://127.0.0.1/ncache_state"

ncache后端内容服务器设置

(1)必须使用Http Head头“Cache-Controll:max-age=秒数”来控制缓存时间,若是不指定将不缓存。

(2)后端内容源服务器发送ncache的Http数据,必须带有“Content-Length”Header头部。

(3)ncache的缓存时间以分钟为单位,会将全部max-age=秒数转换成分钟数,若是max-age小于1分钟,ncache将默认将缓存时间设置成1分钟。

(4)自动删除缓存文件进程,会在天天的凌晨两点删除大约20%的不活动缓存数据。

ncache能够对数据进行快速和线性可扩展的分布式缓存,减小对数据库的访问。ncache能够帮助消除数据库的性能瓶颈,扩展java应用程序的事务处理极限。

ncache2.0版本,是做为一个完整的nginx模块进行发布和使用的,在原有的内核上进行了剥离,更方便开发者的安装和配置。

5.proxy_cache功能(新功能)

从nginx-0.7.44版本开始,nginx支持相似squid较为正规的cache功能,目前还处于开发阶段,这个缓存是把连接用MD5编码hash后保存,所以支持任意连接,也支持404/301/302非正常状态。

首先配置一个cache空间

proxy_cache_path   /javaDevelopMent.com/to cache

levels=1:2 keys_zone=java1:10M inactive=5m max_size=2M  celan_time=1m;

proxy_temp_path参数路劲也要跟proxy_cache_path在一个分区上

以上配置参数说明;

levels:指定该缓存空间有两层hash目录,第一层为1个字母,第二层为2个字母;

keys_zone:为空间起名字  10M指空间大小

inactive=5m指默认缓存时间5分钟

max_size=2M文件最大超过2M就不缓存

celan_time=1m指定一分钟清理一次

综合起来以下:

location ~.*\.(js|css|gif|jpg|jpeg|png|bmp|swf|flv)$

{

proxy_pass :http://backend;

expires 6h;

proxy_cache  java1;//使用java1这个keys_zone

proxy_cache_vaild 200 302 1h;

proxy_cache_vaild 301 1d;

proxy_cache_vaild  any  1m;

}

注:支持缓存的cache0.7.44和0.7.51之间的这个版本稳定性均有问题,这几个版本不建议在生产环境中使用,0.7.39位目前最稳定的版本,建议使用。

相关文章
相关标签/搜索