文档中心

iCMS文档

其他

nginx反向代理缓存,proxy_cache缓存的方法

使用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

#安装完成!

具体安装需要根据自己的实际情况改变

评论

支持icms 1
老大这个该更新了吧,对7.0的系统适用么
验证码 换一张
取 消