Nginx支持相似Squid的缓存功能。Nginx的web缓存服务主要由proxy_cache相关命令集和fastcgi_cache相关的命令集构成的。前者是用于反向代理时对后端内容服务器进行缓存。后者主要是用于对fastcgi的动态程序进行缓存。固然能够也可以使用第三方模块ngx_slowfs_cache实现缓存服务器的配置。javascript
1、在Nginx下面安装缓存服务器php
这里呢,使用Nginx自带的缓存模块。经过nginx_cache命令实现数据的缓存。css
1.下载安装ngx_cache_purge插件:html
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
java
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
2、配置Nginx缓存服务器node
Nginx缓存服务器的配置主要经过proxy_cache相关命令集实现的,下面是nginx.conf文件内容:mysql
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; } }
提示:检查语法出错nginx
[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
解决方法:web
缘由是共享内存空间设置过大,系统已没有足够的内存分配,致使没法启动nginx,能够将上面的keys_zone=ngx_fcgi_cache:150m,设置小一些,例如keys_zone=ngx_fcgi_cache:50m,便可sql
3、测试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便可。