使用Nginx的proxy_cache缓存静态文件
分类:运维技术日期:2012-03-15 - 20:41:49作者:老谢
咦?我不是该在学习ccnp的路由部分么?为什么又搞上nginx了?啊!蛋开始痛了。。写完这篇继续看我的np去,Orz…
安装Nginx — 更详细的请看:http://www.xj123.info/2416.html
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz tar -zxf pcre-8.30.tar.gz wget http://sourceforge.net/projects/libpng/files/zlib/1.2.6/zlib-1.2.6.tar.gz/download tar -zxf zlib-1.2.6.tar.gz wget http://labs.frickle.com/files/ngx_cache_purge-1.5.tar.gz tar -zxf ngx_cache_purge-1.5.tar.gz wget http://nginx.org/download/nginx-1.0.13.tar.gz tar -zxf nginx-1.0.13.tar.gz cd nginx-1.0.13 ./configure --prefix=/usr/local/nginx \ --user=www \ --group=www \ --with-http_ssl_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_realip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-mail --with-mail_ssl_module \ --with-pcre=../pcre-8.30 \ --with-zlib=../zlib-1.2.6 \ --add-module=../ngx_cache_purge-1.5 \ --with-debug \ --http-client-body-temp-path=/var/tmp/nginx/client \ --http-proxy-temp-path=/var/tmp/nginx/proxy \ --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi make && make install ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ mkdir /var/tmp/nginx/cache |
配置文件直接贴出来了,俺也不怕丑了。。(#号后面的内容为注释)
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;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path /var/tmp/nginx/proxy;
#设置Web缓存区名称为cache_one,内存缓存空间大小为20MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为5GB。
#ps:屌丝128M小内存桑不起,如果你是高富帅,可以买大点内存的服务器,缓存可以设大点。
proxy_cache_path /var/tmp/nginx/cache levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g;
server
{
listen 80;
server_name xj123.info www.xj123.info;
location / {
proxy_cache cache_one;
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 304 12h;
#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://demo.xj123.info;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
expires 1d;
}
#扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
location ~ .*\.(php|jsp|cgi)?$ {
proxy_pass http://demo.xj123.info;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。
location ~ /purge(/.*) {
#设置只允许指定的IP或IP段才可以清除URL缓存。
allow 127.0.0.1;
allow 209.141.59.215;
allow 114.102.0.0/16;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
}
}
至此配置结束,需要需要特别注意的是,nginx必须重启,reload重载后缓存仍然是不工作的!
本文大部分都是引用张晏大牛的内容,其中需要说明的是,目前我所使用的1.1.9的nginx用ngx_cache_purge-1.0编译的时候会遇到错误,使用最新的1.5版本则无任何问题。
本为主要参考:使用Nginx的proxy_cache缓存功能取代Squid[原创],nginx1.0.0配ngx_cache_purge实现高效的反向代理
YM老谢大牛
@大D YM万能的大D牛
又一技术型文章。
说实话,看不懂,Ngnix是可以取代Apache的软件吗
@zary nginx取代apache目前来说不可能
Holly Shit..今天又让我学到了东西。。
老谢果然厉害。。我也去折腾折腾。。我反向代理我都还没有弄过。。
@VPS ROLL 反代和缓存可以一气呵成~