RH358学习笔记--8(优化Web服务器)
优化Web服务器流量
一、使用Varnish缓存静态网页
(1)描述 Varnish
 大流量的 Web 服务器通常需要分担部分工作负载,以维持其命中率,降低响应时间
 Varnish 是在 web 服务器之前的 web 加速器。客户端直接访问 Varnish
 Varnish 代表客户端从后端 web 服务器检索并返回请求的对象
 Varnish 也会缓存这些对象,以便为相同对象提供请求,降低 web 服务器负载
(2)解释TTL和清除机制
一些web应用程序和内容管理系统(CMS),如WordPress或MediaWiki,可以直接指示Varnish从其缓存中清除对象。例如,当用户修改Wiki页面时,MediaWiki向Varnish发送该页面的清除请求。对于这些应用程序,将TTL设置为一个非常高的值,例如一周,然后让应用程序控制Varnish缓存。
(3)部署 Varnish
安装 varnish 软件包
[root@host ~]# yum install varnish
启用并启动varnish systemd服务。
[root@host ~]# systemctl enable --now varnish
(4)配置 Varnish
Varnish将其配置划分为两个位置:
 varnishd守护进程命令行参数
 /etc/varnish/default.vcl实现方式文件
(5)使用VCL配置缓存
/etc/varnish/default.vcl配置文件控制对象缓存行为。在Varnish configuration language (VCL)中编写该配置文件。当Varnish启动时,它将该文件转换为二进制格式,然后加载并执行产生的代码。
(6)内置子程序
----->:arnish通过一系列内置子例程处理传入请求和后端响应。在/etc/varnish/default.vcl文件,可以重新定义这些子例程来修改默认行为。
sub vcl_recv {
    if (req.url ~ "\.(mp3|ogg)$") {
    return (pass);
     }
 }
 req对象的url属性包含请求url,例如/index.html或/sound.mp3操作符根据正则表达式测试url属性。
 如果测试成功(即,URL 以 .mp3 或 .ogg 结尾),则子例程返回 pass 关键字。关键字指示 Varnish 跳过缓存,将请求直接传递到后端 web 服务器
----->:vcl_backend_response 子例程处理来自后端 web 服务的回复:
sub vcl_backend_response {
                  if (beresp.ttl > 1d) {
                  set beresp.ttl = 2h;
              }
}
代码解释:
--->1. beresp 对象的 ttl 属性包含对象 TTL。测试可确定该 TTL 是否超过⼀天。在进入该 vcl_backend_response 子例程时,Varnish 将 beresp.ttl 属性设置为两分钟的默认值。但如果后端 web 服务器的回复包括 Cache-Control HTTP 标头,则Varnish 将从该标头设置 ttl 属性
---->2. 子例程将 TTL 减少到仅为两个小时。
----->:声明访问控制列表并配置清除请求:

(7) VCL语法
在重新启动varnish systemd服务之前,使用varnishd -C -f /etc/varnish/default.vcl命令测试您的配
置。该命令编译
VCL文件并显示生成的C代码。最重要的是,当检测到错误时,该命令返回一个非零值。
[root@host ~]# varnishd -C -f /etc/varnish/default.vcl
...output omitted...
[root@host ~]# echo $?
访问 Varnish 文档
varnish-docs 软件包在 /usr/share/doc/varnish-docs/html/目录下提供了 Varnish 文档.

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号