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

简介: 本节书摘来自华章社区《高性能Linux服务器构建实战》一书中的第2章,第2.7节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

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

相关文章
|
机器学习/深度学习 数据库 数据安全/隐私保护
服务器核心组件:CPU 与 GPU 的核心区别、应用场景、协同工作
CPU与GPU在服务器中各司其职:CPU擅长处理复杂逻辑,如订单判断、网页请求;GPU专注批量并行计算,如图像处理、深度学习。二者协同工作,能大幅提升服务器效率,满足多样化计算需求。
4241 39
|
存储 人工智能 容灾
阿里云服务器2核8G、4核16G、8核32G配置热门实例性能对比与场景化选型指南
2核8G/4核16G/8核32G配置的阿里云服务器在阿里云活动中目前有经济型e、通用算力型u1、通用型g7、通用型g8y和通用型g9i五种实例可选,目前2核8G配置选择u1实例活动价格652.32元1年起,4核16G月付选择经济型e实例最低89元1个月,8核32G配置160元1个月起,本文将为大家解析经济型e、通用算力型u1、通用型g7及通用型g8y实例,帮助用户根据自身需求合理选择最适合的实例规格和配置。
|
存储 缓存 安全
阿里云服务器热门实例选择参考:e/u1/c7/c8y/c9i/g7/g8y/g9i/r7/r8y/r9i实例适用场景汇总
通过阿里云的活动购买云服务器时,除了轻量应用服务器之外,活动内的云服务器实例规格主要以e/u1/c7/c8y/c9i/g7/g8y/g9i/r7/r8y/r9i这几种为主。本文主要为介绍阿里云服务器的实例规格是什么,有什么用,并汇总了阿里云轻量应用服务器和这些热门云服务器实例规格的适用场景,以供大家了解和选择适合自己的需求的实例规格。
|
12月前
|
存储 机器学习/深度学习 人工智能
硅谷GPU单节点服务器:技术解析与应用全景
“硅谷GPU单节点服务器”代表了在单个物理机箱内集成强大计算能力,特别是GPU加速能力的高性能计算解决方案。它们并非指代某个特定品牌,而是一类为处理密集型工作负载而设计的服务器范式的统称。
|
存储 弹性计算 缓存
企业级云服务器租用一年需要多少预算?199元2核4G5M带宽阿里云u1实例评测
阿里云企业用户专享,仅需199元/年即可租用ECS通用算力型u1实例(2核4G、5M带宽、80G云盘),适用于中小企业官网、电商展示、数据分析等场景。支持多地域部署,新老用户均可享受,性价比高,助力企业稳定运营。
821 7
|
存储 弹性计算 安全
阿里云渠道商:新手如何选择阿里云ECS实例?
阿里云ECS凭借弹性扩展、稳定可靠与安全防护,助力企业高效上云。本文系统解析实例规格选择关键因素:业务场景匹配、性能评估、成本优化、地域部署与扩展规划,结合计费模式与实际需求,提供科学选型建议,助您精准匹配资源,提升云上效能。(238字)