nginx

使用ngx_slowfs_cache模块构建本地缓存

Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。

蚊子下午在翻看nginx所有addone模块的是,发现了ngx_slowfs_cache,它扩充了Nginx的缓存功能,通过 ngx_slowfs_cache 可以实现本地站点静态文件缓存(配合root指令使用)。此功能为低速的存储设备创建快速缓存提供了可能。举个例子:
网站文件存放在一个网络存储上(network disks),缓存文件则存储在本地磁盘上。
网络存储使用的是 7200转的 SATA硬盘组,而本地磁盘使用的是  15000转的 SAS硬盘。

通过 ngx_slowfs_cache 将静态文件缓存到要地磁盘后,访问速度将明显改善。而且通常缓存是先放到内存中,从内存中命中自然要比硬盘上命中快很多了。

ngx_slowfs_cache 模块同时也提供了“cache_purge”功能,用于清除指定URL的缓存。
ngx_slowfs_cache 当前的版本为:ngx_slowfs_cache-1.5
ngx_slowfs_cache 的下载地址是:http://labs.frickle.com/nginx_ngx_slowfs_cache/

ngx_slowfs_cache 配置参数(英文)
slowfs_cache zone_name (context: http, server, location)
——————————————————–
设置用来放置缓存的区域(使用前需要通过slowfs_cache_path来定义).

slowfs_cache_key key (context: http, server, location)
——————————————————
设置缓存的key值

slowfs_cache_purge zone_name key (context: location)
—————————————————-
设置缓存区和key值,用于从缓存中清除对应的文件

slowfs_cache_path path [levels] keys_zone=zone_name:zone_size [inactive] [max_size] (context: http)
—————————————————————————————————
设置缓存区域
path:存放缓存的路径
levels:缓存文件的目录级数
zone_name:缓存区域的名字
zone_size:内存缓存使用的大小
inactive:如果缓存数据在inactive定义的时间内未被访问,就被移除缓存
max_size:硬盘缓存大小

slowfs_temp_path path [level1] [level2] [level3] (context: http)
—————————————————————-
设置一个临时区域,缓存被存放在缓存区之前就先放在这里
Default: “/tmp 1 2”

slowfs_cache_min_uses number (context: http, server, location)
————————————————————–
文件最少被访问多少次才会被放入缓存区
Default: “1”

slowfs_cache_valid [reply_code] time (context: http, server, location)
———————————————————————-
设置文件被缓存的时间

slowfs_big_file_size size (context: http, server, location)
———————————————————–
Sets minimum file size for “big” files. Worker processes fork() before
they start copying “big” files to avoid any service disruption.
Default: “128k”

ngx_slowfs_cache 配置变量
$slowfs_cache_status
——————–
Represents availability of cached file.
Possible values are: MISS, HIT and EXPIRED.

ngx_slowfs_cache 的安装
1、下载ngx_slowfs_cache,我们将得到一个文件 ngx_slowfs_cache-1.5.tar.gz
2、解压包 tar zxf ngx_slowfs_cache-1.5.tar.gz 得到目录 ngx_slowfs_cache-1.5
3、执行nginx编译,添加一条编译指令 –add-module=../ngx_slowfs_cache-1.5 即可将ngx_slowfs_cache模块编入nginx,完成的编译参数如:
./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_ssl_module –with-http_sub_module –with-http_stub_status_module –add-module=../ngx_slowfs_cache-1.5
4、执行编译安装 make && make install
如果没有意外错误,至此您已经完成了 ngx_slowfs_cache 模块的安装。

ngx_slowfs_cache 配置举例

http {
slowfs_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_test:10m inactive=1h max_size=10m;
location / {
root   html;
index  index.html index.htm index.php;
add_header X-Cache X-HIT-from-nginx;
slowfs_cache cache_test;
slowfs_cache_key $uri;
slowfs_cache_valid 1h;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.28.1;
deny all;
slowfs_cache_purge cache_test $1;
}
}

ngx_slowfs_cache 的使用
按如上配置完成以后,要确认一个文件是否被cache或要清除一个指定URL的缓存,只需要访问:
http://192.168.28.128/index.html
可以看到如下图所示,文件已经被缓存

清除缓存只需要在网页中访问:http://192.168.28.128/purge/index.html即可,如下图

当然也可以在服务器上执行:curl http://127.0.0.1/purge/index.html来清除缓存,服务器返回内容如下

[root@linux01 nginx]# curl http://127.0.0.1/purge/index.html
<html>
<head><title>Successful purge</title></head>
<body bgcolor=”white”>
<center><h1>Successful purge</h1>
<br>Key : /index.html
<br>Path: /usr/local/nginx/cache/b/82/d1546d731a9f30cc80127d57142a482b
</center>
<hr><center>nginx/0.8.50</center>
</body>
</html>

参考:http://labs.frickle.com/nginx_ngx_slowfs_cache/README
http://www.yanghengfei.com/archives/443/

Related Post

3 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *