自从动态生成缩略图上线后,NFS客户端日志时常报无法响应的错误,怀疑是NFS机IO过大,所以想到使用Varnish给NFS机减压,将缩略图存放到内存中,减少读的压力,然后就有了篇博文。 简介:   Varnish是一款高性能的开源HTTP加速器,网上评价比Squid更强,安装配置都很快速,方便。 
一、安装:

# wget http://repo.varnish-cache.org/source/varnish-2.1.5.tar.gz 
# tar zxvf varnish-2.1.5.tar.gz cd varnish-2.1.5 
# ./configure –prefix=/usr/local/varnish 
# make && make install

二、配置文件:

# cp /usr/local/varnish/etc/varnish/default.vcl /usr/local/varnish/etc/varnish/default.vcl.bak
# vi /usr/local/varnish/etc/varnish/default.vcl

# 反向代理请求的后端Web服务器ip和端口
backend default {
     .host = "192.168.1.1";
     .port = "80";
}

sub vcl_recv {
    if (req.request != "GET" && req.request != "HEAD") {
        return(pipe);
    } elseif(req.url ~ "\.(jpg|gif|png)$") {
        return (lookup);
    } else {
        return(pass);
    }
}

sub vcl_pipe {
    return (pipe);
}

sub vcl_pass {
    return (pass);
}

sub vcl_hash {
    set req.hash += req.url;
    if (req.http.host) {
        set req.hash += req.http.host;
    } else {
        set req.hash += server.ip;
    }
    return (hash);
}

sub vcl_hit {
    if (!obj.cacheable) {
        return (pass);
    }
    return (deliver);
}

sub vcl_miss {
    return (fetch);
}

sub vcl_fetch {
    if (beresp.http.Pragma ~ "no-cache" || 
        beresp.http.Cache-Control ~ "no-cache" || 
        beresp.http.Cache-Control ~ "private") {
          return (pass);
    }
   # 清除cookie,设置过期时间为30天
    if (req.request == "GET" && req.url ~ "\.(jpg|gif|png)$") {
        unset req.http.cookie;
        set beresp.ttl = 30d;
    }
    return (deliver);
}

sub vcl_deliver {
    # 增加标识(可使用firebug查看)x-hits,表示是否命中
    set resp.http.x-hits = obj.hits ;
    if (obj.hits > 0) {
       set resp.http.X-Cache = "h";
    } else {
       set resp.http.X-Cache = "m";
    }
}

三、启动:

# /usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -n /var/log/varnish -s malloc,15G -w 300,51200,20 -T 127.0.0.1:2000 -a 0.0.0.0:8080

        说明:
                 
-f 配置文件路径
             -n 主目录
             -s 分配 15G 内存
             -w 线程最小与最大数
             -T 管理IP和端口,可以使用telnet 127.0.0.1 2000 进行管理varnish
             -a 监听 8080 端口

四、写入日志文件:

# /usr/local/varnish/bin/varnishncsa -n /var/log/varnish -w /var/log/varnish/varnish.log

五、查看狀態:

# /usr/local/varnish/bin/varnishstat -n /var/log/varnish

六、關閉Varnish:

# pkill varnishd

七、清除緩存:

        1、清除指定域名:

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:2000 purge "req.http.host ~ statics.xxx.com.tw"

        2、清除image目录下所有缓存:

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:2000 url.purge /image/

        3、清除所有缓存:

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:2000 url.purge *$

八、测试:
         ab测试:
                ab -c 100 -n 1000 http://x.x.x.x/129974432673506402_128x92.jpg
         未使用Varnish前:
                

Server Software:       nginx
Server Hostname:        x.x.x.x
Server Port:            8000

Document Path:          129974432673506402_128x92.jpg
Document Length:        2443 bytes

Concurrency Level:      100
Time taken for tests:   0.667390 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      2730000 bytes
HTML transferred:       2443000 bytes
Requests per second:    1498.37 [#/sec] (mean)
Time per request:       66.739 [ms] (mean)
Time per request:       0.667 [ms] (mean, across all concurrent requests)
Transfer rate:          3994.67 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.6      0       4
Processing:     2   61  23.2     57     248
Waiting:        1   60  23.2     57     247
Total:          2   61  23.1     58     248

Percentage of the requests served within a certain time (ms)
  50%     58
  66%     65
  75%     73
  80%     77
  90%     89
  95%    100
  98%    116
  99%    139
 100%    248 (longest request)

使用Varnish后:

Server Software:        nginx
Server Hostname:        p2.591.com.tw
Server Port:            8000

Document Path:          129974432673506402_128x92.jpg
Document Length:        2443 bytes

Concurrency Level:      100
Time taken for tests:   0.271769 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      2795675 bytes
HTML transferred:       2445443 bytes
Requests per second:    3679.60 [#/sec] (mean)
Time per request:       27.177 [ms] (mean)
Time per request:       0.272 [ms] (mean, across all concurrent requests)
Transfer rate:          10045.30 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    6   2.3      6      12
Processing:     1    7   2.3      7      17
Waiting:        1    6   2.1      7      15
Total:          3   13   1.7     14      23

Percentage of the requests served within a certain time (ms)
  50%     14
  66%     14
  75%     14
  80%     14
  90%     15
  95%     15
  98%     16
  99%     17
 100%     23 (longest request)

总结: 
        Varnish上线后,观察一段时间后,发现NFS报错的原因,尚未改善,现在把生成图片部分,换到NFS上,NFS报错出现的比较少,下一步,看换成千兆Switch后,再观察看看。

參考:
Varnish Cache + Riak
(http://blog.dloh.org/2011/01/varnish-cache-riak.html )
varnish cache 反向代理服务器和http加速器的安装和配置
(http://blog.51yip.com/cache/618.html)
Varnish手冊
(http://www.varnish-cache.org/docs/2.1/tutorial/vcl.html)
varnish安装过程详解
(http://thinkgroupon.com/redirect.php?tid=3872&goto=lastpost)
使用Varnish代替Squid做网站缓存加速器的详细解决方案[原创]
(http://blog.s135.com/post/313/)
Varnish使用小结
(http://iyubo.blogbus.com/logs/35085709.html)

Varnish加速网站图片显示相关推荐

  1. [emWin]利用内存设备加速PNG图片显示——2021.03

    本文为作者原创,如需转载请在醒目位置标明原始出处,并提供可访问的超链接. 上一篇博客中讲了[emWin]利用内存设备加速GIF图片显示,那么这一篇来讲一下同样的方法加速PNG图. 实现原理 emWin ...

  2. [emWin]利用内存设备加速GIF图片显示——2021.03

    本文为作者原创,如需转载请在醒目位置标明原始出处,并提供可访问的超链接. 效果 实现原理 emWin的GIF显示原理是用户程序调用GUI_GIF_DrawSub()绘制函数一帧一帧的解码和显示,并且每 ...

  3. 腾讯云iis8.5新建网站无法访问_教程篇 | 使用七牛云存储、CDN加速网站图片

    嗨,大家好,今天给大家分享的是 使用七牛云等云服务商提供的对象存储服务,存储网站图片,并且可以cdn加速图片,让你的网页变得更快. 首先给大家多多介绍一些有关的知识. 目前各大云服务商都提供了对象存储 ...

  4. CentOS下使用Varnish为网站加速

    1 varnish概述 2 安装varnish 3 varnish 缓存原理 4 实战:缓存一个网站 5 实战:使用varnish缓存多个网站 1 varnish概述 Varnish是一款高性能的开源 ...

  5. Facebook iOS 应用是如何加速图片显示的?

    本文讲的是Facebook iOS 应用是如何加速图片显示的?, 你的Facebook的动态消息中充满着一些关于你朋友.家人以及你所爱的人的照片,也许你会想要在手机上也能重温那些场景.我们一直在寻找提 ...

  6. 织梦网站上传服务器不显示图片,织梦网站图片不显示图片

    织梦网站图片不显示图片 内容精选 换一换 在"文章列表"插件中,检查"设置 > 列表数目"的"显示文章条数"和"显示分页&q ...

  7. 宝塔Nginx环境安装pagespeed模块加速网站以及配置WebP格式图片加速方法

    宝塔面板下为nginx安装ngx_pagespeed模块并配置WebP图片加速的方法,理论上非宝塔环境也适用,加模块使用命令行进行编译即可 网站图片太多,服务器带宽和线路不能动的前提下,对图片进行优化 ...

  8. 无法访问此网站刷新又好了_一键突破或加速网站访问

    非常实用的网站突破或加速小工具.建议收藏备用. 简介和原理: 通过合情合理正常方法,一键突破或加速网站访问.经常遇到访问一些网站显示内容里图片无法正常加载,比如github最近头像,介绍图片等无法加载 ...

  9. 服务器上有图片但是app不显示不出来,网络app图片显示不出来的

    网络app图片显示不出来的 内容精选 换一换 接入CDN加速后,用户访问网站或者APP资源依然很慢.域名是否接入CDN加速是否命中CDN缓存是否跨运营商和跨省缓存规则设置是否合理加速资源是否预热是否客 ...

  10. 如何提高网页中图片显示的用户体验(附源码下载)

    文章中加入适量的图片不仅可以更好的说明和补充文章的内容,而且还可以极大的减缓阅读者在阅读较长篇幅文章时的疲劳和不安.所以图文混排较好的文章能给阅读者更好的用户体验和享受.但是令人遗憾的是很多的网页图片 ...

最新文章

  1. 简单几步制作软raid
  2. SAP Spartacus 读取 Cart 的原理分析
  3. python删除指定天数前的文件_python 删除指定时间间隔之前的文件实例
  4. 并行执行,没用到过,写到这里免得搞忘
  5. Vue.set()实现数据动态响应
  6. 按相反的顺序输出列表的元素python_Python练习实例32 | 如何以相反的顺序来输出列表的值?...
  7. 【排序算法】插入、选择、堆排、快排、归并、计数
  8. 《软件工程》课程:期末复习提纲(超详细课本内容)
  9. 计算机公式里qf是什么,计算公式
  10. [译] 为什么加密货币泡沫会破裂?
  11. 【​观察】 娃娃也能编程?微软“编程一小时”让你家娃也能变身编程达人
  12. python房价预测_python预测房价
  13. x3650 m5U盘安装Linux,x3650 m5 u盘安装win10u盘驱动修复失败怎么办
  14. java通过反射调用方法_Java_通过反射调用类中的方法
  15. 模拟伯努利分布的C语言程序(算法)
  16. 如何用 AppCube,实现那个曾经因为火,而被“封杀”的项目 Working Time丨【玩转应用魔方】
  17. 电脑关闭疑难解答_如何使用Office 365的疑难解答工具解决常见问题
  18. MJD44H11T4G硅功率晶体管 8安培 80伏特 20 WATTS
  19. switch 交换机的基本原理
  20. html5 file 兼容性,WPS2013造成的HTML5 file.type值异常的解决方法

热门文章

  1. 统计数组中出现次数最多的元素并输出
  2. 多目标数据关联基本方法
  3. 只不过窗口没有停留 一闪而过
  4. Deskew Technologies Gig Performer 4 Mac(现场调音机架)
  5. M1到底有多强!这是一份不深不浅的MacBook Air M1测评
  6. Docker 方式搭建 Prometheus + grafana
  7. iOS底层探索之类的结构(中):bits
  8. Python 的NumPy 库中dot()函数详解
  9. 我从可用性测试中学到的五件事
  10. 如何查看Linux发行版内核版本及系统版本?