漆是一个独立的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 em>的途经: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;}