使用nginx 缓存 iCMS 伪静态网页 达到类静态的超快速访问
并比生成海量静态文件更容易管理
而且具备热门页面,缓存到内存.缓存页面长时间无访问自动过期等功能
nginx默认安装就会带有反向代理的功能,
但想要更好的使用,还得配备frickle.com的ngx_cache_purge模块,用于清除指定URL的缓存。
在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。
而在性能上,Nginx对多核CPU的利用,胜过Squid不少。
另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。
这使得一台Nginx可以同时作为“负载均衡服务器”与“CDN缓存服务器”来使用.
网上好多文章都是多台服务器做缓存 然后反向代理到后台服务器
不过作为一个穷人哪来那么多服务器
所以我们要让NGINX既做WEB服务器也做缓存..
这样同样也能起到加速效果..缓存当静态用..
适合伪静态的网站使用..
缓存配置
http {
#缓存配置
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
#临时目录 一般没什么数据 不过一定要有
proxy_temp_path /cache/temp;
#缓存目录 要跟临时目录在同一分区
#levels=1:2 目录层级 1:2 /a/bc
#keys_zone=web_cache:100m web_cache缓存空间名,单页最大缓存100M
#inactive=7d 过期时间 7天
#max_size=50g 缓存最大空间 50G
proxy_cache_path /cache/www_OOXX_com_cache levels=1:2 keys_zone=web_cache:100m inactive=7d max_size=50g;
}
配置网站反向代理
server {
#rewrite "^/article/(\d+).html$" /iCMS/article.php?id=$1 last;
#rewrite "^/article/(\d+)_(\d+).html$" /iCMS/article.php?id=$1&p=$2 last;
#这里不需要写article的rewrite,
#/article/.+\.html的访问已经通过proxy_cahce 到cache.www.OOXX.com 了
#所以 rewrite 要写到 cache.www.OOXX.com 的配置里
location ~ /article/.+\.html$ {
proxy_cache web_cache;
proxy_cache_valid 200 304 301 302 10d;
proxy_cache_valid any 1d;
proxy_cache_key $host$uri$is_args$args;
proxy_pass http://127.0.0.1:80;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Host cache.www.OOXX.com;
proxy_set_header Accept-Encoding '';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-SERVER-NAME $host;
proxy_set_header X-HTTP-HOST $host;
proxy_ignore_headers "Cache-Control" "Expires";
add_header X-Cache "$upstream_cache_status - $upstream_response_time";
}
#清理缓存
#举个例子
#缓存地址为:http://www.ooxx.com/article/123456.html
#那么清理缓存的网址为:
# http://www.ooxx.com/~purge/article/123456.html
#当然你可以限制访问IP
#或者把~purge改成别人猜不到
location ~ /~purge/(.*) {
#allow all;
#allow 127.0.0.1;
#deny all;
proxy_cache_purge web_cache $host/$1;
break;
}
}
重点在 proxy_set_header Host cache.www.OOXX.com;
我们重新设置的Host
然后在服务器的host 文件里写上
127.0.0.1 cache.www.OOXX.com
不用把cache.www.OOXX.com 做A记录到服务器
这样速度是最快
配置cache.www.OOXX.com
server {
listen 80;
server_name cache.www.OOXX.com;
root /data/www.OOXX.com;
rewrite "^/article/(\d+).html$" /iCMS/article.php?id=$1 last;
rewrite "^/article/(\d+)_(\d+).html$" /iCMS/article.php?id=$1&p=$2 last;
location ~ \.php$ {
include fcgi.conf;
}
error_page 500 502 503 504 /502.html;
error_page 404 400 403 /404.html;
}
清除nginx缓存
这个需要通过 nginx模块 ngx_cache_purge
清理
ngx_cache_purge 源码 https://github.com/FRiCKLE/ngx_cache_purge
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxf ngx_cache_purge-2.3.tar.gz
#切换到nginx目录
cd nginx-1.6.2
./configure --user=www --group=www --prefix=/usr/local/nginx --add-module=../ngx_cache_purge-2.3 --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6
make;make install
#安装完成!
具体安装需要根据自己的实际情况改变
评论