Nginx高性能web服务器之缓存服务器(六)

    Nginx支持类似Squid的缓存功能。Nginx的web缓存服务主要由proxy_cache相关命令集和fastcgi_cache相关的命令集构成的。前者是用于反向代理时对后端内容服务器进行缓存。后者主要是用于对fastcgi的动态程序进行缓存。当然可以也可使用第三方模块ngx_slowfs_cache实现缓存服务器的配置。

一、在Nginx下面安装缓存服务器

这里呢,使用Nginx自带的缓存模块。通过nginx_cache命令实现数据的缓存。

1.下载安装ngx_cache_purge插件:

wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz 
直接解压即可:
mkdir /app
tar zxvf ngx_cache_purge-2.1.tar.gz -C /app

2.编译安装Nginx

tar zxvf nginx-1.6.2.tar.gz 
cd nginx-1.6.2
./configure --user=www --group=www --prefix=/usr/local/nginx \
> --add-module=/app/ngx_cache_purge-2.1\
> --with-http_stub_status_module \
> --with-http_ssl_module
make && make install
提示:安装完成后,用"/usr/local/nginx/sbin/nginx -V"查看Nginx的版本和模块信息
[root@mysql nginx-1.6.2]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.6.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) 
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --add-module=/app/ngx_cache_purge-2.1 --with-http_stub_status_module --with-http_ssl_module

二、配置Nginx缓存服务器

Nginx缓存服务器的配置主要通过proxy_cache相关命令集实现的,下面是nginx.conf文件内容:

 

user  www www;
worker_processes  1;
error_log  /usr/local/nginx/logs/nginx_error.log crit;
pid        /usr/local/nginx/nginx.pid;
events {
    use epoll;
    worker_connections  65535;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
    
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k; 
    large_client_header_buffers 4 64k;
    
    client_max_body_size 300m; 
    sendfile        on;
    tcp_nopush     on;
    
  
    keepalive_timeout  65;
    tcp_nodelay on;
    client_body_buffer_size 128k; 
    proxy_connect_timeout 5; 
    proxy_read_timeout 60;
    proxy_send_timeout 5;
    proxy_buffer_size 16k; 
    proxy_buffers 4 64k; 
    proxy_busy_buffers_size 64k; 
    proxy_temp_file_write_size 64k;
    
    gzip  on;
    gzip_min_length 1k; 
    gzip_buffers 4 16k; 
    gzip_http_version 1.1;
    gzip_types text/plainapplication/x-javascript text/css application/xml;
    proxy_cache_path /backup/proxy_cache_dir levels=1:2 keys_zone=cache_one:4096m
    inactive=1d max_size=3g;
#proxy_cache_path:设置缓存的目录,后面跟缓存路径,最好缓存目录放在一个独立硬盘
#levels=1:2 设置目录深度,这里是两层目录深度,第一层是一个字符,第二层是两个字符
#keys_zone设置web缓存区名称,这里是cache_one,后面的4096m表示内存缓存空间大小为4GB
#inactive表示自动清除缓存文件的时间,1d表示一台内没有被访问的内容自动清除
#max_size表示硬盘缓存空间可以使用的最大值,默认情况下经访问的文件常放在内存中缓存,当内存缓存空间不足的时候,Nginx会将不经常访问的数据从内存写到磁盘
    server {
        listen       80;
        server_name  www.a.com www.b.com ;
        charset UTF8;
        #access_log  logs/host.access.log  main;
        location / {
           proxy_cache cache_one;#反向代理缓存设置命令,语法为:"proxy_cache zone|off"
           proxy_cache_valid 200 300 12h;#对不同的HTTP状态码设置不同的缓存时间
           proxy_cache_key $host$uri$is_args$args;#设置以什么样的参数得到缓存
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_pass http://127.0.0.1:8080;
           expires 1d;
        }
      #下面这段用于配置手动清除缓存策略,清除的方法为:如果一个URL为
      #http://www.a.com/2014/0413/3.html,那么通过访问
      #http://www.b.com/purge/2014/0413/3.html即可清除该URL的缓存
     location ~ /purge/(/.*)
    {
     allow 127.0.0.1;#表示允许指定的IP或者IP段才可以清除URL缓存
     allow 192.168.88.0/24;
     deny all;
     proxy_cache_purge cache_one $host$1$is_args$args;
    }
    location ~ .*\.(jsp|php|jspx)?$  #设置不做缓存的内容
    {
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_pass http://127.0.0.1:8080;
     }
     access_log off;
    }
}

提示:检查语法出错

[root@mysql conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 4294967296) failed (12: Cannot allocate memory)
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

解决方法:

  原因是共享内存空间设置过大,系统已没有足够的内存分配,导致无法启动nginx,可以将上面的keys_zone=ngx_fcgi_cache:150m,设置小一些,例如keys_zone=ngx_fcgi_cache:50m,即可

三、测试proxy_cache实现的缓存功能

#启动Nginx,如果有"change manager"进程,说明此进程是用来管理缓存服务和文件的
[root@mysql conf]# ps -ef|grep nginx
root      4786     1  0 15:45 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     4787  4786  0 15:45 ?        00:00:00 nginx: worker process      
nginx     4788  4786  0 15:45 ?        00:00:00 nginx: cache manager process
nginx     4789  4786  0 15:45 ?        00:00:00 nginx: cache loader process
#接着可以通过www.a.com访问任意静态页面,测试访问速度是否加快。同时可以在缓存目录里面查看是否已经生成缓存文件了。如果有缓存文件,说明Nginx的缓存服务搭建成功了!

提示:若要清除指定的URL缓存,直接在清除缓存网页的URL地址前面加purge即可。

你可能感兴趣的:(linux,nginx,shell)