《高性能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

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

相关文章
|
7月前
|
存储 人工智能 容灾
阿里云服务器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实例,帮助用户根据自身需求合理选择最适合的实例规格和配置。
|
6月前
|
存储 弹性计算 安全
阿里云渠道商:新手如何选择阿里云ECS实例?
阿里云ECS凭借弹性扩展、稳定可靠与安全防护,助力企业高效上云。本文系统解析实例规格选择关键因素:业务场景匹配、性能评估、成本优化、地域部署与扩展规划,结合计费模式与实际需求,提供科学选型建议,助您精准匹配资源,提升云上效能。(238字)
|
7月前
|
存储 弹性计算 网络协议
阿里云服务器ECS通用算力型u2a实例,CPU采用AMD EPYC处理器,睿频最高3.7 GHz
阿里云ECS通用算力型u2a实例搭载AMD EPYC处理器,睿频高达3.7GHz,基于CIPU架构,网络与存储突发带宽最高25Gbps,I/O性能强、延迟低。支持多种云盘及IPv4/IPv6,适用于中小型数据库、APP服务等场景,性价比高,官网价降低9%-22%,是中小企业上云优选。
889 0
|
6月前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
1664 5
下一篇
开通oss服务