欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Nginx的Web缓存服务与新浪网的开源NCACHE模块

程序员文章站 2022-05-04 15:32:41
...
#Nginx的Web缓存服务与新浪网的开源NCACHE模块##什么是web缓存 Web缓存位于内容源web服务器和客户端之间,当用户访问一个	URL时,web缓存服务器回去后端web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,web缓存服务器直接输出内容给客户端,而不是像源服务器再次发送请求。web缓存降低了内容源web服务器、数据库的负载,减轻了网络延迟,提高了用户的响应速度,增强了用户体验。最著名的还要数Squid Cache,其主要在Unix一类系统运行。##Nginx的Web缓存服务Nginx从0.7.48后支持类似于Squid的缓存模块。这个缓存是把URL及相关组合当做key,用md5算法对key进行希哈,得到硬盘上对应的希哈路径,从而将缓存内容保存在该目录内。支持任意URL链接。同时也支持404/301/302这样的非200状态码。Nginx的Web缓存服务主要用于proxy_cache相关指令集和fastcgi相关指令集构成,前者用于反向代理时,对后端内容源进行缓存,后者主要用于对FastCDI的动态程序进行缓存。两者功能基本一样。###proxy_cache相关指令集**1、proxy_cache指令**语法:proxy_cache zone_name;默认值:none使用环境:http,server,location该指令用于设置那个缓存区将被应用,zone_name的值为proxy_cache_path指令创建的缓存区明称。**2、proxy_cache_path指令**语法:proxy_cache_path path[levels=number]keys_z [max_size=size];默认值:none使用环境:HTTP**eg:**proxy_cache_path /data0/proxy_cache_dir  levels=1:2 keys_z>_one: 500m inactive=1d max_size=30g;注意该指令只能在http标签内配置,levels指定该缓存有两层hash目录,第一层为1个字母,第二层为2个字母,保存文件名类似于/data0/proxy_cache_dir/c/29/fdg35415fg35f4gsdf2g1535gh465h;key_zone参数用来为缓存区起名,500m指定内存空间大小为500MB;inactive的1d是如果缓存数据在1天之内没有被访问,将被删除;max_size的30g是指硬盘的缓存空间为30GB。**3proxy_cache_methods指令**语法:proxy_cache_methods [GET HEAD POST];默认值:proxy_cache_methods GET HEAD;使用环境:http,server,location该指令用于设置用于缓存那些HTTP方法,默认缓存 HTTP GET/HEAD 方法,不缓存HTTP POST方法。**4proxy_cache_min_uses指令**语法:proxy_cache_min_uses the_number;默认值:proxy_cache_min_uses 1;使用环境:http,server,location该指令设置缓存最小的使用次数,默认值是1.**5、proxy_cache_valid指令**语法:proxy_cache_valid reply_code [reply_code...]time;默认值:none使用环境:http,server,location该指令用于对不同的返回状态码的URL设置不同的缓存时间,例如:proxy_cache_valid 200 302 10m;proxy_cache_valid 404      1m;如果不指定状态吗,直接指定时间,则只有200、301、302状态的URL缓存5分钟。**6、proxy_cache_key指令**语法:proxy_cache_key line;默认值:none使用环境:http,server,location该指令用来设置web缓存的key值,Nginx根据key值md5希哈存储缓存。一般根据`‘$host(域名)、$request_uri(请求路径)’`等组合变量合成proxy_cache_key.例如:`proxy_cache_key "$host:$server_port$uri$is_args$args";`