• 【转载】Nginx基础:6.webcache缓存服务


    1.概述

         Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302这样的非200状态码。虽然目前官方的Nginx Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面,但是,通过一个第三方的Nginx模块,可以清除指定URL的缓存。

         Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。

         最新的Nginx 0.8.32版本,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块(用于清除指定URL的缓存),已经可以完全取代Squid。我们已经在生产环境使用了 Nginx 的 proxy_cache 缓存功能超过两个月,十分稳定,速度不逊于 Squid。

         在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。

    2.Nginx 负载均衡与缓存服务器在 Linux 下的编译安装:

    ulimit -SHn 65535
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz
    tar zxvf pcre-8.00.tar.gz
    cd pcre-8.00/
    ./configure
    make && make install
    cd ../

    wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
    tar zxvf ngx_cache_purge-1.0.tar.gz

    wget http://nginx.org/download/nginx-0.8.32.tar.gz
    tar zxvf nginx-0.8.32.tar.gz
    cd nginx-0.8.32/
    ./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0 --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
    make && make install
    cd ../


    3.proxy_cache完整示例

    (1)首先,把第三方的ngx_cache_purge模块编译安装到Nginx中,用来清除指定URL的缓存


    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz
    tar zxvf pcre-8.00.tar.gz
    cd pcre-8.00/
    ./configure
    make && make install
    cd ../

    wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
    tar zxvf ngx_cache_purge-1.0.tar.gz

    wget http://nginx.org/download/nginx-0.8.32.tar.gz
    tar zxvf nginx-0.8.32.tar.gz
    cd nginx-0.8.32/
    ./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0
    --prefix=/usr/local/webserver/nginx --with-http_stub_status_module
    --with-http_ssl_module
    make && make install
    cd ../


    (2)然后,在同一分区下创建两个缓存目录,分别供proxy_temp_path , proxy_cache_path

    指令设置缓存路径.注:两个指定设置的缓存路径必须为同一磁盘分区,不能跨分区.
    mkdir -p /data0/proxy_temp_path
    mkdir -p /data0/proxy_cache_path

    (3)Nginx配置文件(nginx.conf)对扩展名为gif,jpg,jpeg,png,bmp,swf,js,css的图片,flash,javascript , css文件开启Web缓存,其他文件不缓存.
    示例代码如下:

    ######################################### 示例1开始 ############################################
    http{
      proxy_temp_path /data0/proxy_temp_path ;
      #设置Web缓存区名称为cache_one,内存缓存空间大小为500M,自动清除超过1天没有被  

    #访问的缓存数据,硬盘缓存空间大小为30G
      proxy_cache_path /data0/proxy_cache_path levels=1:2

    keys_zone=cache_one:200m inactive=1d max_size=30g ;
        
      server{
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$
        {
          #使用Web缓存区cache_one
          proxy_cache cache_one ;
          #对不同HTTP状态码缓存设置不同的缓存时间
          proxy_cache_valid 200 304 12h ;
          proxy_cache_valid 301 302 1m ;
          proxy_cache_valid any 1m ;
          #设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据"域名,URI,
          #参数"组合成Key
          proxy_cache_key $host$uri$is_args$args;
        }

        #用于清除缓存,假设一个URL为http://my.domain.com/test.gif,通过访问
        #http://my.domain.com/purge/test.gif可以清除该URL的缓存
        location ~ /purge(/.*)
        {
          #设置只允许指定的IP或IP段才可以清除URL缓存
          allow 127.0.0.1 ;
          allow 192.168.0.0/16 ;
          deny all ;
          proxy_cache_purge cache_one $host$1$is_args$args ;
        }
      }
    }

    ######################################### 示例1 结束############################################

    4.fastcgi_cache完整示例

    (1)首先,在同一分区下创建两个缓存目录,分别供fastcgi_temp_path,fastcgi_cache_path指令设置缓存路径.注:两个指定设置的缓存路径必须为同一磁盘分区,不能跨分区.

    mkdir -p /data0/fastcgi_temp_path
    mkdir -p /data0/fastcgi_cache_path

    (2)Nginx配置文件(nginx.conf)对扩展名为gif,jpg,jpeg,png,bmp,swf,js,css的图片,Flash,JavaScript,CSS文件开启Web缓存,其他文件不缓存.

    示例代码如下:

    ######################################### 示例2 开始############################################

    http{
      #fastcgi_temp_path和fastcgi_cache_path指定的路径必须在同一分区
      fastcgi_temp_path /data0/fastcgi_temp_path ;
      #设置Web缓存区名称为cache_one,内存缓存空间大小为500MB,自动清除超过1天没有被

     #访问的缓存数据,硬盘缓存空间大小为30G
      fastcgi_cache_path /data0/fastcgi_cache_path levels=1:2

    keys_zone=cache_one:200m inactive=1d max_size=30g ;

      server{
        location ~ .*.(php|php5)$
        {
          #使用Web缓存区cache_one
          fastcgi_cache cache_one ;
          #对不同的HTTP状态码缓存设置不同的缓存时间
          fastcgi_cache_valid 200 10m ;
          fastcgi_cache_valid 301 302 1h ;
          fastcgi_cache_valid an 1m ;
          #设置Web缓存的key值,Nginx根据key值md5哈希存储缓存,这里根据"FastCGI服务  

        #器的IP,端口,请求的URI"组合成Key。
          fastcgi_cache_key 127.0.0.1:9000$requet_uri ;
          #FastCGI服务器
          fastcgi_pass 127.0.0.1:9000 ;
          fastcgi_index index.php ;
          include fcgi.conf ;
        }
      }
    }

    ######################################### 示例2 结束############################################


  • 相关阅读:
    堆栈学习
    需要阅读的书籍
    Rust Book Lang Ch.19 Fully Qualified Syntax, Supertraits, Newtype Pattern, type aliases, never type, dynamic sized type
    Rust Lang Book Ch.19 Placeholder type, Default generic type parameter, operator overloading
    Rust Lang Book Ch.19 Unsafe
    Rust Lang Book Ch.18 Patterns and Matching
    Rust Lang Book Ch.17 OOP
    Rust Lang Book Ch.16 Concurrency
    Rust Lang Book Ch.15 Smart Pointers
    HDU3966-Aragorn's Story-树链剖分-点权
  • 原文地址:https://www.cnblogs.com/tango-dg/p/3284362.html
Copyright © 2020-2023  润新知