《高性能Linux服务器构建实战》——2.7节Varnish的常见应用实例

本文介绍了使用Varnish实现图片防盗链及静态文件压缩处理的方法。通过配置Varnish可有效防止图片被非法引用,并能显著提升网页加载速度。

2.7 Varnish的常见应用实例
Varnish可应用在多方面,并且随着版本的升级,其功能性应用也在不断增加,这里仅介绍几个应用广泛、功能强大的应用实例。由于Varnish的配置格式在前面已经详细介绍过,所以这里只给出相应模块的配置代码,并附上相关的说明。
2.7.1 利用Varnish实现图片防盗链
图片防盗链功能对于大型网站的运维非常重要,各种Web服务器,如Apache和Nginx都可以很容易地实现图片防盗链功能。利用Varnish实现这个功能也非常简单,只需在配置文件的vcl_recv函数内增加如下配置即可。

if (req.http.referer ~ "http://.*") {
             if (  !(req.http.referer ~ "http://.*ixdba\.net"
                 || req.http.referer ~ "http://.*google\.com"
                 || req.http.referer ~ "http://.*yahoo\.cn"et
                 || req.http.referer ~ "http://.*google\.cn"
                 )) {
                     set req.http.host = "www.ixdba.net";
                     set req.url = "/templets/default/images/logo.gif";
             }
                             return (lookup);
             }

在这段配置中,用了一个内置变量req.http.referer,防盗链就是通过referer来实现的。其实,referer是http header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上一个referer标识,用来告诉服务器请求是从哪个页面链接过来的服务器根据这个标识就可以获取信息来源,进而进行相应的处理。
这段配置的含义为:Varnish服务器对接收或发送的请求进行判断,如果referer标识存在,且referer标识不匹配下面域名列表中的任意一个,就将请求重定向到www.ixdba.net域名下的/templets/default/images/logo.gif图片,而对找到匹配域名的请求执行lookup操作。
2.7.2 利用Varnish实现静态文件压缩处理
网页压缩技术是一种最为简便的提高网络速度的方法。通过压缩技术,可以减少服务器发送网页的大小,从而降低用户下载的时间,最大效率地利用带宽,提高网站的性能。Varnish本身并不提供压缩的功能,但是可以将要压缩的工作交给后端的服务器去完成,从而变相实现了网页压缩。

首先在Varnish配置文件的“vcl_recv”函数中加入如下配置:
if (req.http.Accept-Encoding) {
                if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
                # No point in compressing these
                remove req.http.Accept-Encoding;
                } else if (req.http.Accept-Encoding ~ "gzip") {
                             set req.http.Accept-Encoding = "gzip";
                } else if (req.http.Accept-Encoding ~ "deflate") {
                             set req.http.Accept-Encoding = "deflate";
                } else {
                             remove req.http.Accept-Encoding;
                }
        }

然后修改“vcl_hash”函数为如下配置:

sub vcl_hash {
    set req.hash += req.url;
          if (req.http.Accept-Encoding ~ "gzip") {
                      set req.hash += "gzip";
        }
        else if (req.http.Accept-Encoding ~ "deflate") {
                    set req.hash += "deflate";
        }

    return (hash);
}

这样就完成了Varnish的压缩配置,将需要压缩的内容都交给了后端服务器去处理。
下面通过一个实例测试来验证压缩的效果。
首先用curl命令请求未压缩的内容。

[root@varnish-server ~]#curl -I  http://www.ixdba.com/article/3e/1557.html
HTTP/1.1 200 OK
Server: Apache/2.2.14 (Unix) PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1
Last-Modified: Mon, 28 Jul 2008 00:48:20 GMT
ETag: "7102d5-819f-4530ae1357d00"
Vary: Accept-Encoding,User-Agent
Content-Type: text/html
Content-Length: 33183
Date: Fri, 16 Jul 2010 06:34:35 GMT
X-Varnish: 1515651004 1515651001
Age: 17
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from ixdba.net
然后用curl命令请求压缩的内容。
[root@varnish-server~]#curl http://www.ixdba.com/article/3e/1557.html \
>-H Accept-Encoding:gzip,defalte -I
HTTP/1.1 200 OK
Server: Apache/2.2.14 (Unix) PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1
Last-Modified: Fri, 16 Jul 2010 05:50:54 GMT
ETag: "748b19-8197-48b7acd54cb80"
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 8538
Date: Fri, 16 Jul 2010 06:34:27 GMT
X-Varnish: 1515651003 1515651002
Age: 5
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from ixdba.net

通过前后两个输出结果可以清楚地看到,压缩已经生效,说明配置成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值