Nginx作为web缓存服务器

         从0.7.48版本开始,Nginx支持类似Squid的缓存功能。Nginx的web缓存服务主要由proxy_cache相关命令集合fastcgi_cache相关命令集构成,前者用于反向代理时对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。此外,如果不想使用Nginx自带的缓存功能,也可使用第三方模块ngx_slowfs_cache来实现缓存服务器的配置。

 

  1. nginx下安装缓存服务器

这里使用Nginx自带的缓存模块,通过proxy命令来实现数据的缓存,所以在编译的时候要加上ngx_cache_purge模块,这个第三方模块是清理Nginx缓存的一个插件。

在网上下载ngx_cache_purge插件的最新版本,然后重新编译安装nginx。

./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr/local/src/pcre-8.31 --add-module=/usr/local/src/ngx_cache_purge-2.3(文件解压后存放的位置)

 

  1. 配置Nginx缓存服务器

Nginx缓存服务器的配置主要通过proxy_cache相关命令来实现。

proxy_cache_path /backup/proxy_cache_dir levels=1:2 keys_zone=cache_one:4096m inactive=1d max_size=3g;

  • poxy_cache_path:用于设置缓存的目录,后面跟缓存路径。最好将缓存目录放在一个独立的硬盘上。
  • levels=1:2:levels用来设置目录深度,这里是两层目录深度,第一层是一个字符,第二层是两个字符。
  • keys_zne:用来设置web缓存区名称,这里的cache_one后面的4096,表示内存缓存空间大小为4GB
  • inactive:表示自动清除缓存文件的时间,这里的“d”表示1天没有被访问的内容自动清除,还可以使用分钟和小时计数,5m,5h。
  • max_size:表示硬盘缓存空间可使用的最大值,默认情况下经访问的文件常将被放到内存中进行缓存,而在内存缓存空间不足时,Nginx会将不经常访问的数据从内存写到磁盘。

 

proxy_temp_path /backup/proxy_temp_dir;

  • 用于指定临时缓存文件的存储路径,这里需要注意的是,两个存放缓存文件的目录必须在同一磁盘分区。

 

location / {

    root   html;

    index  index.html index.htm index.php;

    proxy_cache cache_one;           #反向代理缓存设置命令,语法为“proxy_cache zone|off“,默认为off,需要将proxy_cache命令放在location字段,这样匹配以此location的url才能被缓存。

    proxy_cache_valid 200 304 12h;       #对不懂HTTP状态码设置不同的缓存时间

    proxy_cache_key $host$uri$is_args$args;      #这个命令是设置以什么样的参数得到缓存的文件名,默认为”$scheme$proxy_host$request_uri”,表示以协议,主机名,请求uri(包括参数)做MD5得出缓存的文件名。这里以域名,URI,参数组合成Web缓存的key值,nginx会根据key哈希,存储缓存内容到二级缓存目录内

    }

        

         下面配置手动清除缓存策略:

         location ~ /purge(/.*) {

        allow 127.0.0.1;

        allow 192.168.1.0/24;

        deny all;

        proxy_cache_purge cache_one $host$1$is_args$args;

}

这里设置可以清除缓存的ip和网段,下面说的是清除的内容

         location ~ \.php?$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html/$fastcgi_script_name;

            include        fastcgi_params;

}

.php结尾的文件不用缓存

手动清除缓存的方法

http://192.168.1.120/index.html                                                  访问

http://192.168.1.120/purge/index.html                                      清除缓存策略

 t

 

  1. 验证我们的缓存服务是否成功启动

[root@Goun conf]# ps -ef | grep nginx

root       9390      1  0 20:52 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

www        9392   9390  0 20:52 ?        00:00:00 nginx: worker process                                         

www        9393   9390  0 20:52 ?        00:00:00 nginx: cache manager process

进程nginx:cache manager process这个进程是用来管理缓存服务和文件的。