让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缓存配置和ngx_cache_purge总结

nginx缓存配置 首先设定一个cache日志的格式,可以在日志中查看“MISS”和“HIT”状态 log_format cache '***$time_local '  '***$ups...
  • zuogenyu
  • zuogenyu
  • 2015年08月25日 14:06
  • 838

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

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

Nginx动静分离+proxy_cache缓存

nginx的动静分离和proxy_cache缓存可以同时设置,感觉在集群部署时可能效果更好。一.http模块增加缓存设置 proxy_temp_path /etc/nginx/proxy_tem...
  • tshangshi
  • tshangshi
  • 2016年08月08日 20:26
  • 2577

nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL

一,nginx反向代理配置        #tomcat Java代码      upstream tomcat_server{   server 127.0...
  • nyist327
  • nyist327
  • 2015年01月12日 18:08
  • 2414

Nginx 配置技巧:Nginx 如何启用 proxy_cache 缓存?

原文地址《Nginx 配置技巧:Nginx 如何启用 proxy_cache 缓存?》 标签: Nginx Nginx启用proxy_cache Nginx配置技巧 http://...
  • littlesmallless
  • littlesmallless
  • 2017年12月31日 00:16
  • 20

nginx+keepalived+proxy_cache配置高可用nginx群集和高速缓存

在Keepalived + Nginx高可靠负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故障时,热备服务...
  • hqs2212586
  • hqs2212586
  • 2017年01月20日 14:15
  • 456

nginx 无 ngx_cache_purge 模块时的刷新方法

转自:http://floss.blog.51cto.com/683157/1056292 今天碰到一个江湖救急的事儿,要紧急把 N 多台 CacheServer 上的文件清除掉。用的都是 ...
  • forest_boy
  • forest_boy
  • 2015年12月17日 17:58
  • 533

使用fastcgi_cache加速你的Nginx网站

很久以前在TW上挖了个坑,说nginx的fastcgi_cache是被大家忽视的一大金矿,今天把这个坑填上。   对于变化不太频繁的数据,大家都比较喜欢存Memcached以减少数据库的读取,但还是...
  • moqiang02
  • moqiang02
  • 2014年07月14日 22:57
  • 831

浏览器中F5与Ctrl+F5的区别(有图有真相)

在浏览器中验证F5刷新与Ctrl+F5刷新的区别(有图)。
  • fwy19930618
  • fwy19930618
  • 2014年04月18日 18:17
  • 2019

我的nginx配置,针对proxy_cache的

说一下,这篇文档主要是针对记录安装proxy_cache的,顺便记一下nginx.conf配置文件,实验环境,后端就开了一个tomcat 1.安装nginx 下载purge包,清除缓存用的,放到ngi...
  • qq_33324608
  • qq_33324608
  • 2017年02月28日 15:05
  • 275
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让nginx的proxy_store和proxy_cache支持ctrl+f5和PURGE二种方
举报原因:
原因补充:

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