12343052 发表于 2018-11-10 12:11:18

戏说Nginx(三)

  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 zxvfnginx-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缓存服务器:
  配置:
  userwww www;
  worker_processes4;
  error_loglogs/error.lognotice;
  pid      logs/nginx.pid;
  worker_rlimit_nofile 65535;
  events {
  use epoll;
  worker_connections65535;
  }
  http {
  include       mime.types;
  default_typeapplication/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_timeout0;
  keepalive_timeout60;
  client_body_buffer_size 512k;
  proxy_connect_timeout5;
  proxy_read_timeout 60;
  proxy_send_timeout 5;
  proxy_buffer_size16K;
  proxy_buffers464k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  gzipon;
  gzip_min_length 1k;
  gzip_buffers    416k;
  gzip_http_version1.1;
  gzip_comp_level      2;
  gzip_typestext/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_nameyan.blog.com m.blog.com;
  charset utf-8;
  #access_loglogs/host.access.logmain;
  location / {
  proxy_cachecache_one;
  参数说明:
  反向代理缓存设置命令,语法为“proxy_cache   zone|off",默认值为off,需要将proxy_cache命令放到location字段,这样匹配此location的url才能被缓存。
  proxy_cache_valid200 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_name127.0.0.1;
  #charset koi8-r;
  #access_loglogs/host.access.logmain;
  location / {
  root   /var/www/html/;
  indexindex.html index.htm;
  }
  #error_page404            /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的进程:
  # ps -ef | grep nginx
  root      23641      10 10:37 ?      00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
  www       23749236410 10:45 ?      00:00:01 nginx: worker process
  www       23750236410 10:45 ?      00:00:01 nginx: worker process
  www       23751236410 10:45 ?      00:00:00 nginx: worker process
  www       23752236410 10:45 ?      00:00:01 nginx: worker process
  www       23753236410 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地址即可。

页: [1]
查看完整版本: 戏说Nginx(三)