Varnish改进web性能和安全性

是一个独立的HTTP加速器,提供高效率和强大的Web缓存机制。除了执行web高速缓存,清漆还可以充当一个Web应用防火墙(WAF)和负载平衡器,以及它可以与任何后端的Web服务器集成。

光油在所有流行的Linux发行版的支持。在CentOS的它可以从EPEL存储库和官方Varnish存储库中获得。首选后者,因为它更新更频繁,更有可能拥有最新版本。

今天,Varnish的最新版本是3.0。要安装Varnish存储库,请运行该命令转--nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm。在此之后,安装光油本身与命令百胜安装清漆。确保新安装的服务启动,并在系统停止通过与命令添加到系统运行级别chkconfig清漆上。现在,您应该所有设置;在未来,当你运行更新软件的其余部分可以更新包百胜更新

基本配置

文件/ etc / SYSCONFIG /清漆定义守护程序的基本选项,如监听端口和存储选项。最重要的选项是由指令定义DAEMON_OPTS。您可以在此变量的三个预定义选项中进行选择:最小配置、使用Varnish配置语言(VCL)配置和高级配置。我们将选择第二个选项,即使用VCL,因为VCL是使Varnish如此强大和可定制的原因,我们将很快看到这一点。

在文件/ etc / SYSCONFIG /清漆中,取消对第二个配置选项,这样它看起来像这样:

DAEMON_OPTS =“ - 一:6081 \ -T本地主机:6082 \ -f /etc/varnish/default.vcl \ -u清漆-g清漆\ -S的/ etc /清漆/秘密\ -s文件/ var / lib中/清漆/ varnish_storage.bin,1G”

确保下面的事被注释掉,从而保持无效。

上面的第一个值是监听端口 -一:6081。这意味着要使用Varnish,您必须将站点连接到端口6081,而不是像http://example.org:6081中那样连接到端口80。这允许您测试Varnish,而不必对web服务器进行任何更改。只是不要忘记允许传入请求到防火墙的这个端口(/ sbin目录/ iptables的-I INPUT -p TCP --dport 6081)。

后来,一旦你拥有了一切配置根据自己的喜好,你会想光油开始在端口80上就已经发生了变化听音选择拦截Web请求是不够的,因为您的Web服务器可能在80端口监听了。改变Apache听不同的端口,如8080,更改选项在/etc/httpd/conf文件中。

有时,重新配置web服务器的监听端口并不容易,也不安全,特别是当您有多个vhost时。在这种情况下,您可以求助于iptables。下面的命令将接口eth0上TCP端口80上的所有传入请求重定向到TCP端口6081:/ sbin目录/ iptables的-I PREROUTING -t NAT -i的eth0 -p TCP --dport 80 -j REDIRECT --to端口6081。iptables的可以帮你迅速上光油和无缝集成Web服务器。

接下来的配置选项-T本地主机:6082。它指示Varnish在TCP端口6082上的本地接口(127.0.0.1)上提供一个简单的命令行管理接口。您可以使用命令连接到它varnishadm

的选项-f /etc/varnish/default.vcl指定默认的VCL文件,我们会得到一个瞬间。

光油工作在自己的用户和组,并重命名为清漆,并与选项中定义-u清漆-g清漆

为了访问管理接口,您必须使用秘密密码进行身份验证。的选项-S的/ etc /清漆/秘密定义为包含机密,使用的管理服务器和客户端的文件的路径。

最后也是最重要的选项(-s)可以缓存存储。默认存储为文件 - 即,缓存的内容存储在文件/var/lib/varnish/varnish_storage.bin文件系统。根据上面的配置,其文件大小限制为只有1GB。这是一个比较保守的配置选项,因为它是基于文件的,将可能提供慢读/写性能的能力。为了获得更好的效果,你可以使用RAM(简称清漆配置“的malloc”)来存储缓存。指定存储选项,s malloc, 1 g。您也可以增加存储容量,考虑到你的系统资源。

保存配置文件并开始光油首次用命令服务清漆启动

高级配置

光油,您可以使用VCL微调其配置。VCL支持简单的编程功能,如常量,条件语句和子程序。根据我们的主要配置,VCL文件/etc/varnish/default.vcl。

在VCL文件中的第一个定义是默认的后端,其被配置成与所述后端定义,看起来像这样:

{.host = "127.0.0.1";.port = " 80 ";}

此配置假定光油的工作原理相同主机作为Web服务器上。如果不是这种情况下,你可以使用远程IP地址的主机值。

VCL提供了三个重要的预定义子例程,它们负责客户端、Varnish和后端服务器之间通信流的不同部分。vcl_recv处理来自客户端的请求。它允许您更改请求或在条件满足时采取某些操作。vcl_fetch从后端已经接收到响应之后被激活,让您操作的响应。在此过程中你可能会改变是否响应应视其内容高速缓存。vcl_deliver使您可以到去到客户端的内容对象的最终变化。

该文件/etc/varnish/default.vcl包含由注释掉了,而不是积极的VCL使用的许多例子,VCL的文档包含更多的信息和例子。

优化光油和提高缓存命中率比

刚开始清漆,并使用它作为后端的Web服务器的代理并不能保证更好的性能。如果任何缓存它可能会做一点,因为很多时候web应用程序本身的设计做缓存,虽然他们并不总是有效的。此外,经常客户端请求,即使请求独特性只能由唯一的cookie确定的唯一的数据。默认情况下,光油尊重所有上述情况下,几乎不缓存。

要查看缓存Varnish做了多少,使用命令/usr/bin/varnishstat并检查输出的第二行和第三行:

Hitrate ratio: 10 21 21 Hitrate avg: 0.9927 0.9889 0.9889

Varnishstat创建实时的,而不是从日志的统计信息。命中率比示以秒为单位三个时期 - 10,100和1,000秒。在上面的例子中,它已经运行只有21秒,这就是为什么它显示了这个值,而不是100至1000秒。

Hitrate avg显示了缓存在每个时间段的有效性。你的目标应该使hitrate avg值尽可能接近一;如果该值接近于零,则意味着很少或根本没有进行缓存。

如果你发现你的缓存命中率很低,开始调查网页的HTTP头。您可以使用山猫,在所有的Linux发行版控制台的Web浏览器,用命令转储头猞猁——转储然后附上网址:

$猞猁突降-head http://192.168.1.202/test.php ... X-光油:479098342 年龄:0 的途经:1.1清漆...

年龄是第一个要看的指标。按RFC 2616,13.2.3年龄计算,年龄自原始服务器生成响应以来的秒数。第一次访问新URI时,这个数字总是0。

如果年龄不随每个后续请求增加,那么缓存不能正常工作,并且每个请求转到原始服务器。当发生这种情况光油可以作为一个简单的反向代理。

清漆常见理由不成为一个缓存的页面是请求包含饼干,响应包含饼干,或生存时间(TTL)设置为过去,这意味着页面已过期。

解决上述情况,最好的办法就是通过你的Web应用程序 - 增加TTL和删除不必要的饼干。在一般的开发人员往往需要很多实施饼干。在正常情况下一个网站应该只对注册用户来区分它们设置cookies。

如果您使用的是流行的网络应用程序,它可能已经有插件来提高性能。例如,WordPress的有w3total Cache,这解决了这些问题,并与光油完美。

如果不能更改应用程序的工作方式,可以使用Varnish来管理cookie。首先,您可以使用vcl_fetch子程序删除从后端服务器的响应cookie。

一方面,改变饼干的工作方式是有风险的,有时是不可行的像论坛和购物车的站点。在这种情况下,你要跟踪和区分访问者所有的时间。

在另一方面,它的安全删除所有cookie进行,其中只需要输入管理员后端饼干博客和营业场所。作为一个例子,假设一个网站,通过http://example.org/admin/只允许管理员用户登录。在如情况下,使用条件语句用正则表达式匹配的请求URL(req.url),如:

子vcl_fetch {如果(!(req.url〜 “^ /管理/”)){未设置beresp.http.set cookie的;}}

属性中的默认逻辑未被重写vcl_fetch <代码>预定义的例程,而是附加你的。重载光油(<码>服务清漆重载),用于使其生效。

通常情况下,上述说法就足以确保对于给定的URL返回完全相同的结果,因此所有的请求都被光油缓存。进行更改后,检查年龄再次显示URL的头,以确保后续请求时它会增加。

如果年龄值仍然不增加,你可以尝试改变TTL。在里面vcl_fetch子例程:添加新行设置beresp。ttl = 1 d;使TTL成为自某一天起的第一个唯一请求。

通常,删除cookie和手动设置TTL可以完成这个任务,并使Varnish开始缓存。有关的更多选项和建议,请查看有关的完整文档提高命中率

清漆作为高可用性的负载平衡器

光油可以用在所谓的导演一个管理实体,联合多个后端服务器上运行。定义后端平衡类似于定义一个独立的后端。所不同的是来自探测选项,后端健康探测,这是负载平衡非常重要。下面是从文件/etc/varnish/default.vcl一个例子:

后台服务器1 {.host = "192.168.1.101";.port = " 80 ";.probe = {.url = "/index.php";.interval = 30年代;.timeout = 10;.window = 5;.threshold = 5;}}

探测配置具有以下选项:

  • 网址是在后端一个简单的地址。如果你需要一个更复杂的检查,你可以使用请求以及URL,并指定自定义请求头。
  • 间隔为每个探针之间的时间。其值应比下一个选项,超时值。更关键的停机时间,下此选项的值。
  • 超时是请求必须成功的窗口。为了适应速度较慢的应用程序,从高值开始。
  • 阈值是将后端服务器声明为健康的最后成功探测的数目。

使用这个例子作为模型,您的后端服务器的其余部分添加到配置文件/etc/varnish/default.vcl。下一步是配置导演,它执行负载均衡:

导演mybalancer客户{{.backend = server1的;。重量= 1;} {.backend = server2上;。重量= 1;}}

在上面的例子中,我们首先将均衡器命名为mybalancer。接下来,客户选项决定如何平衡做;从单个客户端的每个请求将被发送到相同的后端服务器。当客户端经过一个连续的过程,你要他们开始和结束相同的后端服务器上这可能是很重要的。默认情况下,使用IP地址来区分客户。

除了基于客户机的平衡之外,您还可以指定随机循环。唯一的区别是你不应该指定a重量循环平衡的因素。权重决定使用后端的优先级。后端接收的请求与其权重因子成比例。

一旦导演配置,最后一步是指导光油用在一些代码中使用它vcl_recv子程序。对于当前的示例中,配置是这样的:

子vcl_recv {集req.backend = mybalancer;集client.identity = client.ip;}
12 第1页
第1页共2页
工资调查:结果在