nginx是个很厉害的web-server除了做日常的web-server外还兼职做了缓存服务器。我参照张宴老师的博客做了回nginx缓存的实验。当然目前还是有些问题没有解决。安装我参照的http://youzao.blog.51cto.com/3946111/737273 网友的。

    一、安装pcre

# tar zxvf pcre-8.20.tar.gz 
#  cd pcre-8.20
#  ./configure 
#  make
#  make install

二、安装nginx

tar zxvf ngx_cache_purge-1.4.tar.gz

#  tar zxvf nginx-1.1.10.tar.gz 
#  cd nginx-1.1.10

#  ./configure --user=www --group=www --add-module=../ngx_cache_purge-1.4 --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

#  make
#  make install
#  mkdir -p /data/proxy_temp_dir
#  mkdir -p /data/proxy_cache_dir

 

三、配置nginx

 

   
   
   
   
  1. user  www www; 
  2.  
  3. worker_processes 8; 
  4.  
  5. error_log  /data/logs/nginx_error.log  crit; 
  6.  
  7. pid        /usr/local/nginx/nginx.pid; 
  8.  
  9. #Specifies the value for maximum file descriptors that can be opened by this process.  
  10. worker_rlimit_nofile 65535; 
  11.  
  12. events  
  13.   use epoll; 
  14.   worker_connections 65535; 
  15.  
  16. http  
  17.   include       mime.types; 
  18.   default_type  application/octet-stream; 
  19.  
  20.   charset  utf-8; 
  21.        
  22.   server_names_hash_bucket_size 128; 
  23.   client_header_buffer_size 32k; 
  24.   large_client_header_buffers 4 32k; 
  25.   client_max_body_size 300m; 
  26.        
  27.   sendfile on; 
  28.   tcp_nopush     on; 
  29.  
  30.   keepalive_timeout 60; 
  31.  
  32.   tcp_nodelay on; 
  33.  
  34.   client_body_buffer_size  512k; 
  35.   proxy_connect_timeout    5; 
  36.   proxy_read_timeout       60; 
  37.   proxy_send_timeout       5; 
  38.   proxy_buffer_size        16k; 
  39.   proxy_buffers            4 64k; 
  40.   proxy_busy_buffers_size 128k; 
  41.   proxy_temp_file_write_size 128k; 
  42.  
  43.   gzip on; 
  44.   gzip_min_length  1k; 
  45.   gzip_buffers     4 16k; 
  46.   gzip_http_version 1.1; 
  47.   gzip_comp_level 2; 
  48.   gzip_types       text/plain application/x-javascript text/css application/xml; 
  49.   gzip_vary on; 
  50.   proxy_temp_path   /data/proxy_temp_dir; 
  51.   proxy_cache_path  /data/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g
  52.    
  53.   upstream backend_server { 
  54.     server   192.168.0.237:80 weight=1 max_fails=2 fail_timeout=30s
  55.   } 
  56.  
  57.   server 
  58.   { 
  59.     listen       80; 
  60.     server_name  www.5926.com; 
  61.     location / 
  62.     { 
  63.          proxy_next_upstream http_502 http_504 error timeout invalid_header; 
  64.          proxy_cache cache_one; 
  65.          proxy_cache_valid  200 304 12h; 
  66.          proxy_cache_key $host$uri$is_args$args; 
  67.          proxy_set_header Host  $host; 
  68.          proxy_set_header X-Forwarded-For  $remote_addr; 
  69.          proxy_pass http://backend_server; 
  70.          expires      1d; 
  71.     } 
  72.     location ~ /purge(/.*) 
  73.     { 
  74.      allow            127.0.0.1; 
  75.      allow            192.168.0.0/24; 
  76.      deny            all; 
  77.      proxy_cache_purge    cache_one   $host$1$is_args$args; 
  78.     }     
  79.  
  80.     location ~ .*\.(php|jsp|cgi)?$ 
  81.     { 
  82.          proxy_set_header Host  $host; 
  83.          proxy_set_header X-Forwarded-For  $remote_addr; 
  84.          proxy_pass http://backend_server; 
  85.     } 
  86.  
  87.     access_log  /data/logs/access_log.log combined; 
  88.   } 

四、启动nginx

 

[root@nginx_cache ~]# /etc/init.d/nginx start

nginx start ok

 

五、访问指定的测试页,验证缓存的生效;

访问测试页http://192.168.0.231/test.html

 

nginx 做缓存服务器_第1张图片

 

查看是否已生成缓存

 

[root@nginx_cache ~]# ll /data/proxy_cache_dir/

total 32

drwx------ 3 www www 4096 Feb 15 14:41 2

drwx------ 3 www www 4096 Feb 15 14:39 3

drwx------ 3 www www 4096 Feb 15 14:58 8

drwx------ 3 www www 4096 Feb 15 14:27 c

此处注意将缓存目录的权限服务nginx的www账户。我在测试的时候,未付权限发现缓存文件未生成;

此时,修改测试页内容。并使用别的机器访问,发现访问的内容没有变化,证明缓存生效了。

使用purge来清除缓存生成md5值;具体方法在修改后的页面路径前添加purge;

 

nginx 做缓存服务器_第2张图片

此处可以看到显示purge成功;

再用别的电脑去访问,发现以前的缓存已经去掉生成了新的缓存文件;

 

nginx 做缓存服务器_第3张图片

当然在生产环境下,这种纯靠手工更新的方式肯定是行不通的;所以可以通过curl等命令结合shell写脚本进行页面的更新;

 

遇到的问题:

参照张宴老师的博客,发现缓存服务器自身只能起到缓存及负载均衡的作用,但是自身的web-server配置并未生效;目前还不明白是什么问题;

 

 

 

 

参考张宴博客地址:

http://blog.s135.com/nginx_cache/