Nginx作为web缓存服务器应用

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

1.在Nginx下安装缓存服务器:

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

        下载ngx_cache_purge模块,下载地址:http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz   

安装:

wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz
tar zxvf ngx_cache_purge-2.1.tar.gz -C /app 
                tar zxvf  nginx-1.4.7.tar.gz  
                cd nginx-1.4.7
                 ./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

2.配置Nginx缓存服务器:

        配置:               

             

user  www www;
                worker_processes  4;
                error_log  logs/error.log  notice;
                pid        logs/nginx.pid;
                worker_rlimit_nofile 65535;
                
                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_max_body_size     300m;
                    client_header_buffer_size    32k;
                    large_client_header_buffers 4 32k;
                
                    sendfile        on;
                    tcp_nopush     on;
                
                    #keepalive_timeout  0;
                    keepalive_timeout  60;
                    
                    client_body_buffer_size 512k;
                    proxy_connect_timeout  5;
                    proxy_read_timeout 60;
                    proxy_send_timeout 5;
                    proxy_buffer_size  16K;
                    proxy_buffers  4  64k;
                    proxy_busy_buffers_size 128k;
                    proxy_temp_file_write_size 128k;
                
                    gzip  on;
                    gzip_min_length 1k;
                    gzip_buffers    4  16k;
                    gzip_http_version  1.1;
                    gzip_comp_level      2;
                    gzip_types  text/plain application/x-javascript text/css application/xml;
                    gzip_vary on;
                
                    proxy_cache_path /backup/proxy_cache_dir levels=1:2 keys_zone=cache_one:1024m inactive=1d ma
                x_size=3g;

                    参数说明:

                            ☆ proxy_cache_path :  用于设置缓存的目录,后面跟缓存路径。最好将缓存目录放在一个独立的硬盘上。

                            ★ levels=1:2  :   levels用来设置目录深度,这里是两层目录深度,第一层是一个字符,第二层是两个字符。

                            ☆ keys_zone  :   用来设置web缓存区名称,这里是cache_one,后面的“4096m”表示内存缓存空间大小为4GB。

                            ★ inactive  :  表示自动清除缓存文件的时间,这里的“1d"表示1天没有被访问的内容自动清除,还可以使用分钟或小时计时,例如“5m"表示5分钟后自动清除,“5h”表示5小时后自动清除。

                            ☆ max_size  : 表硬盘缓存空间可使用的最大值,默认情况下经访问的文件常将被放到内存中进行缓存,而在内存缓存空间不足时,Nginx会将不经常访问的数据从内存写到磁盘。

       

proxy_temp_path /backup/proxy_temp_dir;
                    参数说明:
                           ★ proxy_temp_path : 用于指定临时缓存文件的存储路径,这里需要注意的是,proxy_temp_path和proxy_cache_path指定的路径必须在同一磁盘分区。
                    
                    server {
                        listen       80;
                        server_name  yan.blog.com m.blog.com;
                        charset utf-8;
                        #access_log  logs/host.access.log  main;
                        location / {
                            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值哈希,存储缓存内容到二级缓存目录内。
                            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://yan.blog.com/bbs/index.html,那么通过访问http://yan.blog.com/purge/bbs/index.html即可清除该URL的缓存。
                
                        location ~ /purge(/.*) {
                            #allow   127.0.0.1;
                            参数说明:
                                    表示只允许指定的IP或IP段才可以清除URL缓存。
                            #allow   17.100.0.0/24;
                            #deny   all;
                            proxy_cache_purge    cache_one   $host$1$is_args$args;
                        }
                        #设置不做缓存的内容,这里设置扩展名以.jsp、.php、.jspx结尾的动态应用程序不缓存。
                        location ~ .*\.(jsp|php|jspx)?$  {
                            proxy_set_header Host $host;                            
                            proxy_set_header Host $host;
                            proxy_set_header X-Forwarded-For  $remote_addr;
                            proxy_pass http://127.0.0.1:8080;
                        }
                        access_log off;
                
                    }
                    server {
                        listen       8080;
                        server_name  127.0.0.1;
                
                        #charset koi8-r;
                
                        #access_log  logs/host.access.log  main;
                
                        location / {
                            root   /var/www/html/;
                            index  index.html index.htm;
                        }
                
                        #error_page  404              /404.html;
                
                        # redirect server error pages to the static page /50x.html
                        #
                        error_page   500 502 503 504  /50x.html;
                        location = /50x.html {
                            root   html;
                        }
                    }
                }

3.测试proxy_cache实现的缓存功能:

         

启动Nginx后,查看Nginx的进程:                  
            [root@nginx01 ~]# ps -ef | grep nginx
            root      23641      1  0 10:37 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
            www       23749  23641  0 10:45 ?        00:00:01 nginx: worker process      
            www       23750  23641  0 10:45 ?        00:00:01 nginx: worker process      
            www       23751  23641  0 10:45 ?        00:00:00 nginx: worker process      
            www       23752  23641  0 10:45 ?        00:00:01 nginx: worker process      
            www       23753  23641  0 10:45 ?        00:00:00 nginx: cache manager process

            从输出可知,Ngin进程多了一个“cache manager”进程,这个进程就是用来管理缓存服务和文件的。

4.如何清除指定的URL缓存:

            有时候修改网页内容,如果不想等到缓存文件过期后自动清理,还可以通过手动方式清理缓存文件,清理方式在上面介绍Nginx配置文件时已经做过说明,只需在清除缓存网页的URL地址前面增加purge即可。

            例如:

                    要清除http://yan.blog.com/index.html这个页面的缓存文件,只需在浏览器重输入http://yan.blog.com/purge/index.html地址即可。



转载于:https://blog.51cto.com/6284444/2105882