• 【转载】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 结束############################################


  • 相关阅读:
    MySQL忘记root密码的找回方法
    MySQL中的备份和恢复
    MySQL中的锁(表锁、行锁)
    设计模式之: 策略模式
    MySQL流程函数
    高效查看MySQL帮助文档的方法
    php动态获取函数参数
    设计模式之: 代理模式
    网站性能优化指标
    设计模式之: 状态模式
  • 原文地址:https://www.cnblogs.com/tango-dg/p/3284362.html
Copyright © 2020-2023  润新知