让nginx的proxy_store和proxy_cache支持ctrl+f5和PURGE二种方

转载 2012年07月25日 21:22:55
主要是对我的个人博客的PHP执行代码进行Cache,对于Js,CSS直接在客户端缓存即可,这儿重点是对PHP的CGI执行结果在服务器端进行缓存,以减少服务器的DB查询压力,这样DB从21次/秒降低到13次/秒。目前让nginx的proxy_store和proxy_cache支持ctrl+f5和PURGE结合删除缓存的方法二种:
一.让ngx_cache_purge来帮忙,通过Nginx对ctrl+f5的标志来进行重写清除日志。
二.用PHP来实现清除后并再次跳转到对应的Uri模块,以实现页面缓存更新后的显示。
三.修改ngx_cache_purge源代码。。。。:(暂时忽略。
-----------------
方法一:

步骤1:需要编译安装ngx_cache_purge这个模块让它来对缓存进行清理。
  1. ./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module   --add-module=/root/software/nginx_http_push_module-0.692   --add-module=/root/software/ngx_cache_purge-1.3  


步骤2:
nginx.conf中加入对Ctrl+F5刷新的标志判断并UrlRewrite:
  1.  #limit_zone  crawler  $binary_remote_addr  10m;  
  2. fastcgi_cache_path /data0/proxy_temp_dir  levels=1:2  keys_zone=cache_php:30m inactive=1d max_size=1g;  
  3. fastcgi_temp_path /data0/ngx_fcgi_tmp;  
  4. location ~ /purge(/.*)  
  5. {  
  6.   fastcgi_cache_purge cache_php $host$1$is_args$args;  
  7. }  
  8. if ( $request_method = "PURGE" ) {  
  9. rewrite ^(.*)$ /purge$1 last;  
  10. }  
  11.   
  12. #limit_conn   crawler  20;      
  13. location ~ .*\.(php|php5)?$  
  14. {        
  15.   #fastcgi_pass  unix:/tmp/php-cgi.sock;  
  16.   fastcgi_pass  127.0.0.1:9000;  
  17.   fastcgi_index index.php;  
  18.   include fcgi.conf;  
  19.   #以下是fastcgi_cache的配置  
  20.   fastcgi_cache   cache_php;  
  21.   fastcgi_cache_valid   200 302  1h;  
  22.   fastcgi_cache_min_uses  1;  
  23.   fastcgi_cache_use_stale error  timeout invalid_header http_500;  
  24.   #fastcgi_cache_key http://$host$request_uri;  
  25.   fastcgi_cache_key $host$uri$is_args$args;  
  26.   if ($http_Cache_Control ~ "no-cache")   
  27.   {  
  28.     set $http_Cache_Control 'max-age=604800';  
  29.     rewrite ^(.*)$ /purge$1 last;  
  30.   }  
  31. }  


对已经缓存的页面用Ctrl+F5后出现:
Successful purge

Key : justwinit.cn/read.php?entryid=4454&page=&part=
Path: /data0/proxy_temp_dir/c/b8/ea9939947c0cf37b9cae885987876b8c
nginx/1.0.4

清理成功!!
-----------------
方法二:
步骤1:
用PHP来实现,其Nginx配置代码修改为:
  1.  #limit_zone  crawler  $binary_remote_addr  10m;  
  2. fastcgi_cache_path /data0/proxy_temp_dir  levels=1:2  keys_zone=cache_php:30m inactive=1d max_size=1g;  
  3. fastcgi_temp_path /data0/ngx_fcgi_tmp;  
  4. location ~ /purge(/.*)  
  5. {  
  6.   fastcgi_pass   127.0.0.1:9000;  
  7.   include        fastcgi_params;  
  8.   fastcgi_param  SCRIPT_FILENAME    /data0/htdocs/blog/purge.php;  
  9.   error_page 405 =200 /purge$1;  
  10. }  
  11. if ( $request_method = "PURGE" ) {  
  12. rewrite ^(.*)$ /purge$1 last;  
  13. }  
  14. #limit_conn   crawler  20;      
  15. location ~ .*\.(php|php5)?$  
  16. {        
  17.   #fastcgi_pass  unix:/tmp/php-cgi.sock;  
  18.   fastcgi_pass  127.0.0.1:9000;  
  19.   fastcgi_index index.php;  
  20.   include fcgi.conf;  
  21.   #以下是fastcgi_cache的配置  
  22.   fastcgi_cache   cache_php;  
  23.   fastcgi_cache_valid   200 302  1h;  
  24.   fastcgi_cache_min_uses  1;  
  25.   fastcgi_cache_use_stale error  timeout invalid_header http_500;  
  26.   #fastcgi_cache_key http://$host$request_uri;  
  27.   fastcgi_cache_key $host$uri$is_args$args;  
  28.   if ($http_Cache_Control ~ "no-cache")   
  29.   {  
  30.     set $http_Cache_Control 'max-age=604800';  
  31.     rewrite ^(.*)$ /purge$1 last;  
  32.   }  
  33. }  

步骤2:
通过UrlRewrite后的结果到purge.php后进行Md5目录规则的删除,并再次刷新该页面,
purge.php代码如下:
  1. <?php  
  2. @header("Content-Type: text/html; charset=utf-8");  
  3. @header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
  4. @header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  
  5. @header("Cache-Control: no-store, no-cache, must-revalidate");  
  6. @header("Pragma: no-cache");  
  7. $host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');  
  8. //uri  
  9. function request_uri()  
  10. {  
  11.   if (isset($_SERVER['REQUEST_URI']))  
  12.   {  
  13.     $uri = $_SERVER['REQUEST_URI'];  
  14.   }  
  15.   else  
  16.   {  
  17.     if (isset($_SERVER['argv']))  
  18.     {  
  19.       $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0];  
  20.     }  
  21.     else  
  22.     {  
  23.       $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];  
  24.     }  
  25.   }  
  26.   return $uri;  
  27. }  
  28. $uri = request_uri();  
  29.   
  30. $url = "http://".$host.$uri;  
  31. $md5md5 = md5($url);  
  32. $cacheRoot = "/data0/proxy_temp_dir";  
  33. $cacheFile = $cacheRoot . '/' . substr($md5, -1, 1) . '/' . substr($md5, -3, 2) . '/' . $md5;  
  34. if(is_file($cacheFile))  
  35. {  
  36.   @unlink($cacheFile);  
  37. }  
  38. echo '<script language="javascript" type="text/javascript">';  
  39. echo "window.location.href='{$url}'";  
  40. echo '</script>';  
  41. ?>  

相关文章推荐

nginx缓存cache的几种方式

nginx缓存cache的几种方式 官方详细参数:http://wiki.nginx.org/NginxHttpProxyModule 1、传统缓存之一(404) 这个办法是把nginx的404...
  • Truong
  • Truong
  • 2015年11月08日 22:13
  • 1796

Nginx实践:用proxy_store实现高效的静态文件分布缓存服务器

曾经写过是否要放弃使用varnish/squid, 经过几天的实验,终于找到一种比较理想的解决方案:   直接使用proxy模块的proxy_store来实现分布mirror.   首先说...

nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除

一,nginx反向代理配置      #tomcat   显然就是用户访问www.wolfdream.com(需要设置本地localhost,将www.wolfdream.com指向ngin...
  • sgear
  • sgear
  • 2014年09月29日 14:42
  • 1137

使用Nginx反向代理和proxy_cache缓存搭建CDN服务器加快Web访问速度

碰到问题: 移动用户访问web服务器www.osyunwei.com很慢 解决办法: 1、在移动机房放置一台nginx反向代理服务器 2、通过域名DNS智能解析,所有移动用户访问www.osy...
  • langsim
  • langsim
  • 2015年09月15日 18:49
  • 2561

使用Nginx的proxy_cache缓存功能取代Squid

 [文章作者:张宴 本文版本:v1.2 最后修改:2009.01.12 转载请注明原文链接:http://blog.s135.com/nginx_cache/]  Nginx从0.7.48版本开始,支...
  • carzyer
  • carzyer
  • 2011年06月09日 09:18
  • 326

利用Proxy Cache使Nginx对静态资源进行缓存

前言 Nginx是高性能的HTTP服务器,通过Proxy Cache可以使其对静态资源进行缓存。其原理就是把静态资源按照一定的规则存在本地硬盘,并且会在内存中缓存常用的资源,从而加快静态资源...

高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式

通过《高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景》一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率是相当高的。...

nginx proxy cache 缓存 流程

1.向客户端响应时,查询本地是否有缓存 ngx_http_upstream_init_request--->ngx_http_upstream_cache-->ngx_http_file_cache_...

Nginx+proxy_cache高速缓存配置

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wgkgood.blog.51cto.com/1192594/773278 ...
  • gzh0222
  • gzh0222
  • 2012年08月08日 17:14
  • 2413

利用Proxy Cache使Nginx对静态资源进行缓存

前言 Nginx是高性能的HTTP服务器,通过Proxy Cache可以使其对静态资源进行缓存。其原理就是把静态资源按照一定的规则存在本地硬盘,并且会在内存中缓存常用的资源,从而加快静态资源...
  • czp11210
  • czp11210
  • 2014年06月05日 10:16
  • 14053
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让nginx的proxy_store和proxy_cache支持ctrl+f5和PURGE二种方
举报原因:
原因补充:

(最多只允许输入30个字)