nginx cache试用

nginx cache现在已经在0.8以上的版本默认启用了,其实是作为proxy部分的一部分。而且现在nginx cache已经支持expires, gzip,内存cache管理等等,已经可以作为线上可以使用了。

使用nginx cache一直是有这个想法的,因为squid实在是太过臃肿了,而连接数到达400已经很吃力了,而nginx的优势恰恰是在连接数上。下面就开始试用吧。

首先是安装,我还特地下载了一个purge工具,专门用来进行推送,但是还是要单独安装squidclient。

 ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-file-aio --add-module=/home/timo/download/ngx_cache_purge-1.2 
 make 
 make install 

下面这个是我自己的一个Nginx.conf文件,用来做最简单的cache功能

user www-data;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info;

#pid logs/nginx.pid;

events {
  worker_connections 1024;
  use	epoll;
  }

http {
include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;

sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;

gzip on;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
#gzip_min_length 1100;
gzip_buffers 16 8k;
#gzip_disable "MSIE [1-6]\.(?!.*SV1)";

proxy_cache_path /var/www/nginx_cache levels=1:2
keys_zone=cache_one:200m inactive=1d max_size=200m;
# proxy_temp_path /var/www/nginx_cache/temp;

server {
listen 10.1.41.81:81;
# expires 2d;

location / {
  proxy_cache cache_one;
  # proxy_cache_valid 200 301 302 304 30d;
  proxy_cache_key $host$uri;
  proxy_hide_header Vary;
  proxy_set_header Host $host;
  proxy_set_header Accept-Encoding '';
  proxy_set_header X-Forwarded-For $remote_addr; add_header X-Cache "HIT from cache_test";
  proxy_pass http://10.1.41.81;
  if ( $request_method = "PURGE" ) {
  rewrite ^(.*)$ /purge$1 last;
  }
}

location ~ /purge(/.*) {
  allow 10.0.0.0/8;
  deny all;
  error_page 405 =200 /purge$1;
  proxy_cache_purge cache_one $host$1$is_args$args;
  }
}
}

现在对proxy cache进行下说明:

proxy_cache_path /var/www/nginx_cache levels=1:2
keys_zone=cache_one:200m inactive=1d max_size=200m;

levels1:2表示有2层目录,第一层是一个字母或数字,第二层为2个字母或数字
keys_zones=cache_one:200m 其中cache_one为自己定义的名字,200m为这个cache目录的大小 inactive=1d 表示当这个文件在一天没有请求后会进行清理
max_size=200m 能够缓存的最大空间为200m

proxy_cache_valid 200 301 302 304 30d;
这个看wiki按我的理解是200,301,302,304这些Http code可以缓存有效30天,也可以把这些http code替换成any, 但是这样会导致404,502,503也会被缓存。

add_header X-Cache “HIT from cache_test”;
这个是在http头中加入自定义的头,比如像我加如一个跟squid一样的Hit头

if purge这个部分是直接抄的http://sudone.com/nginx/nginx_cache_purge.html 这个为了做推送用的。

推送的方法就是参考ayou的

 squidclient -h192.168.0.123 -p80 -mPURGE -v http://www.sudone.com/index.html