七、Nginx学习笔记七Nginx的Web缓存服务

 1 user www;
 2 worker_processes 1;  
 3 error_log /usr/local/nginx/logs/error.log crit;  
 4 pid /usr/local/nginx/logs/nginx.pid;  
 5 events {  
 6 worker_connections 64;  
 7 }  
 8 http {  
 9 include /usr/local/nginx/conf/mime.types;  
10 default_type application/octet-stream;  
11 #charset gb2312;  
12 server_names_hash_bucket_size 128;  
13 client_header_buffer_size 32k;  
14 large_client_header_buffers 4 32k;  
15 proxy_buffer_size 16k; 
16 proxy_buffers 4 16k;
17 keepalive_timeout 60;  
18 fastcgi_connect_timeout 300;  
19 fastcgi_send_timeout 300;  
20 fastcgi_read_timeout 300;  
21 fastcgi_buffer_size 128k;  
22 fastcgi_buffers 4 128k;  
23 fastcgi_busy_buffers_size 128k;  
24 fastcgi_temp_file_write_size 128k;  
25 client_body_temp_path /usr/local/nginx/client_body_temp;  
26 proxy_temp_path /usr/local/nginx/proxy_temp;  
27 proxy_cache_path //usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
28 fastcgi_temp_path /usr/local/nginx/fastcgi_temp;  
29   
30 gzip on;  
31 gzip_min_length 1k;  
32 gzip_buffers 4 16k;  
33 gzip_http_version 1.0;  
34 gzip_comp_level 2;  
35 gzip_types text/plain application/x-javascript text/css application/xml;  
36 gzip_vary on;  
37   
38 client_header_timeout 3m;  
39 client_body_timeout 3m;  
40 send_timeout 3m;  
41 sendfile on;  
42 tcp_nopush on;  
43 tcp_nodelay on;  
44 #设定虚拟主机  
45 #include  /usr/local/nginx/conf/vhost/aa.test.com;
46 include /usr/local/nginx/conf/vhost/tomcat.com;
47 
48 
49 
50 }
Nginx.conf
 1 upstream 192.168.1.101 {
 2     server 192.168.1.101:8080;
 3     server 192.168.1.100:8080;
 4 #    hash_method crc32;
 5     }
 6 server {
 7         listen       80;
 8         server_name  192.168.1.101;
 9         charset utf-8;
10   location / {
11             root   html;
12             index  index.html index.htm;
13             proxy_pass        http://192.168.1.101;
14             proxy_set_header  X-Real-IP  $remote_addr;
15             client_max_body_size  100m;
16         }
17 location ~ .(jpe?g|png|gif)$ {
18     valid_referers 192.168.1.3;
19     if ($invalid_referer) {
20         return 403;
21                 }
22               }
23 
24 location ~ .*.(gif|jpg|jpeg|bmp|png|js|css|swf|html)?$  #   //缓存文件类型
25     {
26     
27          proxy_cache cache_one;
28  
29          proxy_cache_valid 200 304 12h;
30          proxy_cache_valid 301 302 1m;
31          proxy_cache_valid any 1m;
32          proxy_cache_key $host$uri$is_args$args;
33         
34          proxy_set_header Host  $host;
35          proxy_set_header X-Forwarded-For  $remote_addr;
36          proxy_pass http://192.168.1.101;
37     }
38 
39 
40 }
tomcat7

 

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.Nginx的Web缓存服务及和Squid的比较
Nginx的Web缓存服务主要由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
inactive的1d指如果缓存数据在1天内没有被访问,将被删除
max_size的30g是指硬盘缓存空间为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根据Key值md5哈希存储缓存.一般根据$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://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缓存,其他文件不缓存.
示例代码如下:
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 ;
    }
  }
}

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;
inactive的1d指如果缓存数据在1天内没有被访问,将被删除;
max_size的30g是指硬盘缓存空间为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根据Key值md5哈希存储缓存.一般根据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_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 ;
    }
  }
}

原文地址:https://www.cnblogs.com/nb-blog/p/5272508.html