设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 4839|回复: 4

[nginx 反向代理] nginx的cache_purge模块及支持squidclient刷新的配置 [复制链接]

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

签到
475
注册时间
2008-5-19
最后登录
2019-11-16
在线时间
1946 小时
阅读权限
200
积分
59409
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2010-8-31 12:48:38 |显示全部楼层
nginx proxy_cache是一个类似squid的完整的缓存解决方案,它是0.7.44版本之后加入的功能,发展了比较长时间,想必也能稳定下来了。在没有proxy_cache之前只能用proxy_store缓存页面,因为nginx并没有为proxy_store设计任何刷新机制,所以要用的话还得加入外部设计的刷新功能,比如shell啊php等等,使用proxy_cache就会方便一些。

一、proxy_cache

proxy_cache在网上有很多的例子可以照搬,我也抄来了一段简单的配置:

proxy_cache_path /dev/shm/nginx_cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=200m;

server {
    location / {
        proxy_pass         http://192.168.0.123;
        proxy_cache        cache_one;
        proxy_cache_valid  200 302 301 1d;
        proxy_cache_key    $host$uri$is_args$args;
        proxy_hide_header Vary;
        proxy_set_header Host $host;
        proxy_set_header Accept-Encoding '';
        proxy_set_header X-Forwarded-For  $remote_addr;
        proxy_ignore_headers "Cache-Control" "Expires";
    }
}

我是希望做一个类似透明代理的服务器,不需要在这台cache机器做太多的域名配置,上面这个配置就会把所有的域名都扔给后台192.168.0.123,省事。

注意,这台nginx需要设定proxy_set_header Accept-Encoding '';(或是后台服务器关闭gzip),这样这台机器才不会缓存被压缩的文件,造成乱码。

proxy_ignore_headers "Cache-Control" "Expires";这段配置加上后,proxy_cache就能支持后台设定的expires。

二、cache_purge

cache_purge是一个第三方模块,使用cache_purge模块可以手工删去缓存中的一个链接,可达到实时更新的目的,在这个页面可以下载到:

http://labs.frickle.com/nginx_cache_purge/

上面这个网页中给出了配置代码,一般直接拷贝测试就可成功,安装也比较简单,--add-module=...就可以了。

location ~ /purge(/.*) {
    allow              192.168.0.0/24;
    deny               all;
    proxy_cache_purge  cache_one $host$1$is_args$args;
}

使用这个配置,敲入:

curl http://www.sudone.com/purge/index.html

就可实现刷新缓存,其实也挺方便的,但这样会有一个问题,我要刷新一个页面,比如http://www.sudone.com/index.html,就不得不在这个页面中间插入一个purge,不太方便。解决这个问题有好多种办法,比如把purge放到链接后面,变成http://www.sudone.com/index.html.purge,或者干脆的就改成squidclient的PURGE方式,和squid接轨的好处不仅仅是操作方便,而且给别人解释使用方法也不用花费口舌。

配置思路就是,用if判断$request_method是PURGE时,转到/purge/这个location里去处理:

location / {
    ...#上面的配置
    if ( $request_method = "PURGE" ) {
        rewrite ^(.*)$ /purge$1 last;
    }
}

修改配置用squidclient测试,测试方法:

squidclient -h192.168.0.123 -p80 -mPURGE -v http://www.sudone.com/index.html

测试失败,抛出一个405 Method not allowed,思考……不得其解。

不过405的问题有办法处理,很简单,加上一个

location ~ /purge(/.*) {
    ...#上面的配置
    error_page 405 =200 /purge$1;
}

遇到405错误后转到自身一次,问题解决,测试通过。

附一个完整的配置:

  1. proxy_cache_path /dev/shm/nginx_cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=200m;



  2. server {

  3.     location / {

  4.         proxy_pass         http://192.168.0.123;

  5.         proxy_cache        cache_one;

  6.         proxy_cache_valid  200 302 301 1d;

  7.         proxy_cache_key    $host$uri$is_args$args;

  8.         proxy_hide_header Vary;

  9.         proxy_set_header Host $host;

  10.         proxy_set_header Accept-Encoding '';

  11.         proxy_set_header X-Forwarded-For  $remote_addr;

  12.         if ( $request_method = "PURGE" ) {

  13.             rewrite ^(.*)$ /purge$1 last;

  14.         }

  15.     }



  16.     location ~ /purge(/.*) {

  17.         allow              192.168.0.0/24;

  18.         deny               all;

  19.         error_page 405 =200 /purge$1;

  20.         proxy_cache_purge  cache_one $host$1$is_args$args;

  21.     }

  22. }
复制代码



作者:Ayou 来源:http://sudone.com/nginx/nginx_cache_purge.html
<-sina_sign,1762622645,2a5b1a59,10->感谢大家对linuxtone的支持!</strong>

Rank: 6Rank: 6

注册时间
2010-7-27
最后登录
2019-7-22
在线时间
72 小时
阅读权限
70
积分
9464
帖子
22
主题
2
精华
0
UID
9923
发表于 2011-3-10 16:54:34 |显示全部楼层
这个不错~!

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-3-9
最后登录
2017-11-6
在线时间
468 小时
阅读权限
90
积分
126765
帖子
18
主题
3
精华
0
UID
12308
发表于 2011-3-10 17:53:10 |显示全部楼层
好文章。。收藏了。。。谢谢。。。

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-12-1
最后登录
2015-5-14
在线时间
911 小时
阅读权限
90
积分
45743
帖子
139
主题
7
精华
0
UID
11315
发表于 2011-3-15 20:07:46 |显示全部楼层
好,详细得很

使用道具 举报

论坛元老

终身VIP

Rank: 8Rank: 8

注册时间
2010-11-21
最后登录
2017-4-11
在线时间
173 小时
阅读权限
90
积分
16454
帖子
32
主题
4
精华
0
UID
11203
发表于 2011-7-8 13:33:37 |显示全部楼层
做过了。感觉效果不是很明显。。。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2019-12-13 05:32 , Processed in 0.032868 second(s), 14 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部