nginx缓存服务器指令介绍

2015-11-13 16:39:11 8885

此篇文章摘抄自网络:

1.Web缓存的定义.

Web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL,Web缓存服务器会去

后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL

Web缓存服务器直接输出内容给客户端,而不是向源服务器再次发送请求.Web缓存降低

了内容源Web服务器,数据库的负载,减少了网络延迟,提高了用户访问的响应速度,增强了

用户体验.

2.Squid介绍

Web缓存服务器中,最著名的要数Squid Cache(简称为Squid)Squid是一个流浪的自由软件的代理服务器和Web缓存服务器。

Squid可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,

Squid可以为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,

Squid可以通过过滤流量帮助网络安全,到局域网通过代理上网.

3.NginxWeb缓存服务及和Squid的比较

NginxWeb缓存服务主要由proxy_cache相关指令集和fastcgi相关指令集构成

(1)proxy_cache相关指令集用于反向代理时,对后端内容源服务器进行缓存.Nginx

    proxy_cache缓存功能,十分稳定,速度不逊于Squid.

(2)fastcgi相关指令集主要用于对FastCGI的动态程序进行缓存.两者功能基本一样.

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

4.proxy_cache相关指令集

(1)proxy_cache指令 语法: proxy_cache zone_name ;

    该指令用于设置哪个缓存区将被使用,zone_name的值为proxy_cache_path指令创建的缓

存区的名称.

(2)proxy_cache_path指令语法 proxy_cache_path path [levels=number]

keys_zone=zone_name:zone_size[inactive=time] [max_size=size];

该指令用于设置缓存文件的存放路径.:

    proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:500m

 

inactive=1d max_size=30g ;

path 存放目录

levels 指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层目录为2个字母,保存的文件名会类似/data0/proxy_cache_dir/c/29/XXXXXX ;

keys_zone参数用来为这个缓存区起名.

500m 指内存缓存空间大小为500MB

inactive1d指如果缓存数据在1天内没有被访问,将被删除

max_size30g是指硬盘缓存空间为30G

(3)proxy_cache_methods 指令 语法:proxy_cache_methods[GET HEAD POST];

    该指令用于设置缓存哪些HTTP方法,默认缓存HTTP GET/HEAD方法,不缓存HTTP POST 方法

(4)proxy_cache_min_uses指令 语法:proxy_cache_min_uses the_number

    该指令用于设置缓存的最小使用次数,默认值为1

(5)proxy_cache_valid指令 语法: proxy_cache_valid reply_code [reply_code...]time ;该指令用于对不同返回状态码的URL设置不同的缓存时间.:

proxy_cache_valid 200 302 10m ;

proxy_cache_valid 404 1m ;

设置200,302状态的URL缓存10分钟,404状态的URL缓存1分钟.

(6)proxy_cache_key指令 语法: proxy_cache_key line ;

    该指令用来设置Web缓存的Key,Nginx根据Keymd5哈希存储缓存.一般根据$host(域名),$request_uri(请求的路径)等变量组合成proxy_cache_key .

5.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://www.landui.com/files/ngx_cache_purge-1.0.tar.gz

    tar zxvf ngx_cache_purge-1.0.tar.gz 

    wget http://www.landui.com/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的图,flashjavascript , css文件开启Web缓存,其他文件不缓存.示例代码如下:

    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根据Keymd5哈希存储缓存,这里根据"域名,URI,

          #参数"组合成Key

          proxy_cache_key $host$uri$is_args$args;

        }

        #用于清除缓存,假设一个URLhttp://www.landui.com/test.gif,通过访问

        #http://www.landui.com/purge/test.gif可以清除该URL的缓存

        location ~ /purge(/.*)

        {

          #设置只允许指定的IPIP段才可以清除URL缓存

          allow 127.0.0.1 ;

          allow 192.168.0.0/16 ;

          deny all ;

          proxy_cache_purge cache_one $host$1$is_args$args ;

        }

      }

    }

 

6.fastcgi_cache相关指令集

(1)fastcgi_cache指令

    语法:fastcgi_cache zone_name;

    该指令用于设置哪个缓存区将被使用,zone_name的值为fastcgi_cache_path指令创建的缓存区名称.

(2)fastcgi_cache_path指令

    语法:fastcgi_cache_path path [levels=number] keys_zone=zone_name:zone_size[inactive=time] [max_size=size]; 该指令用于设置缓存文件的存放路径,:

    fastcgi_cache_path /data0/fastcgi_cache_dir levels=1:2

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

    注意这个指令只能在http标签内配置,

    levels指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母,保存的

    文件名会类似/data0/fastcgi_cache_dir/c/29/XXXX;

    keys_zone参数用来为这个缓存区起名,

    500m指内存缓存空间大小为500MB;

    inactive1d指如果缓存数据在1天内没有被访问,将被删除;

    max_size30g是指硬盘缓存空间为30GB

(3)fastcgi_cache_methods指令

    语法:fastcgi_cache_methods [GET HEAD POST] ;

    该指令用于设置缓存哪些HTTP方法,默认缓存HTTP GET/HEAD 方法,不缓存HTTP POST方法

(4)fastcgi_cache_min_uses指令

    语法:fastcgi_cache_min_uses the_number;

    该指令用于设置缓存的最小使用次数,默认值为1.

(5)fastcgi_cache_valid指令

    fastcgi_cache_valid reply_code [reply_code...] time;

    该‎指令用于对不同返回状态码的URL设置不同的缓存时间.

    fastcgi_cache_valid 200 302 10m ;

    fastcgi_cache_valid 404 1m ;

    设置200,302状态的URL缓存10分钟,404状态的URL缓存1分钟.如果不指定状态码,直接指定缓存时间,则只有200,301,302状态的URL缓存5分钟.

(6)fastcgi_cache_key指令

    语法:fastcgi_cache_key line ;

    该指令用来设置Web缓存的Key,Nginx根据Keymd5哈希存储缓存.一般根据FastCGI务器的地址和端口,$request_uri(请求的路径)等变量组合成fastcgi_cache_key 

7.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缓存,其他文件不缓存.

    http{

      #fastcgi_temp_pathfastcgi_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根据keymd5哈希存储缓存,这里根据"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 ;

        }

      }

    }

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: