作者:小勺年 | 来源:互联网 | 2014-05-28 09:40
nginx的反代理功能一直很强大,无奈过去没有很好的cache机制,在0.7.44版里新加入的proxycache功能后,发展至今,这个功能已经很完善和稳定,感觉有种替代传统cache如squid的趋势
nginx的反代理功能一直很强大,无奈过去没有很好的cache机制,在0.7.44版里新加入的proxy
cache功能后,发展至今,这个功能已经很完善和稳定,感觉有种替代传统cache如squid的趋势啊。
配置一下,很简单,配合上nginx的规则过滤真的很强大啊,简单http部分配置如下:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#### proxy_cache_path
指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中。缓存的文件名和key为代理URL的MD5
码。levels参数指定缓存的子目录数,所有活动的key和元数据存储在共享的内存区域中,这个区域用keys_zone参数指定,keys_zone指定缓存的名字和共享内存大小,如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。cache
manager进程控制磁盘的缓存大小,在max_size参数中定义,超过其大小后最少使用数据将被删除。
proxy_cache_path /www/ng_cache levels=1:2
keys_zOne=tmp_cache:1000m inactive=1d max_size=10000m;
upstream backend {
server 10.0.8.1:80
}
server {
listen
80;
server_name localhost;
#### proxy_temp_path 必须和 proxy_cache_path 在同一分区
proxy_temp_path
/www/ng_tmp;
location / {
proxy_pass
http://backend;
####
proxy_cache设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。在0.7.48后,缓存遵循后端的Cache-Control,
Expires以及其他等。缓存依赖代理的缓冲区,如果proxy_buffers设置为off,将不会生效。
proxy_cache
tmp_cache;
#### proxy_cache_key 指定了包含在缓存中的缓存关键字(默认情况下服务器的主机名并没有包含到缓存关键字中)
proxy_cache_key
$host$uri$is_args$args;
#### 只对代码为200, 301和302的应答进行缓存10分钟
proxy_cache_valid 10m;
}
#### purge缓存的设置
location ~ /purge(/.*) {
allow
127.0.0.1;
deny
all;
#### proxy_cache_purge
设置要purge的缓存名字和cache_key(需和proxy_cache_key对应,不然会purge成404,要使用purge,需在编译nginx的时候加上第三方的cache_purge模块)
proxy_cache_purge tmp_cache
$host$1$is_args$args;
}
}
}
但proxy_cache好像没办法跟squid样的在多个不同分区同时设置缓存目录和文件,不过nginx可以通过nginx的做法,我是先多设置几个proxy_cache_path指定不同分区取不同名字,然后起多个server监听不同端口缓存到不同的proxy_cache_path,再通过upstream的url_hash或者其他方式反代理过去,测试还是很好使的~~