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

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

相关文章
|
10天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
13天前
|
Linux
linux下搭建tftp服务器教程
在Linux中搭建TFTP服务器,需安装`tftp-server`(如`tftpd-hpa`)。步骤包括:更新软件包列表,安装`tftpd-hpa`,启动并设置开机自启,配置服务器(编辑`/etc/default/tftpd-hpa`),添加选项,然后重启服务。完成后,可用`tftp`命令进行文件传输。例如,从IP`192.168.1.100`下载`file.txt`: ``` tftp 192.168.1.100 <<EOF binary put file.txt quit EOF ```
28 4
|
23天前
|
Linux
linux查看应用对应的端口
linux查看应用对应的端口
15 0
|
23天前
|
网络协议 安全 Linux
linux系统安全及应用——端口扫描
linux系统安全及应用——端口扫描
35 0
|
8天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
24 6
|
28天前
|
Linux Shell 网络安全
【Shell 命令集合 网络通讯 】Linux 与SMB服务器进行交互 smbclient命令 使用指南
【Shell 命令集合 网络通讯 】Linux 与SMB服务器进行交互 smbclient命令 使用指南
40 1
|
6天前
|
Linux 数据安全/隐私保护
Linux基础与服务器架构综合小实践
【4月更文挑战第9天】Linux基础与服务器架构综合小实践
1192 6
|
18天前
|
Linux 测试技术 C语言
【Linux】应用编程之C语言文件操作
【Linux】应用编程之C语言文件操作
|
18天前
|
Ubuntu Linux 虚拟化
【Linux】ubuntu安装samba服务器
【Linux】ubuntu安装samba服务器
|
18天前
|
Linux
Linux安装bind9搭建自己的域名服务器
Linux安装bind9搭建自己的域名服务器
11 0

热门文章

最新文章