美文网首页
Varnish 导览

Varnish 导览

作者: C86guli | 来源:发表于2016-07-19 15:49 被阅读235次

    编译自(有时会添加自己的话,可能不会明显标记出来):
    https://www.varnish-cache.org/docs/4.0/tutorial/index.html

    本文档包含基本的主题:Varnish 是什么,Varnish 是怎么工作的。

    目录:

    • Varnish 缓存代理的基本原理
    • 支持的平台
    • Varnish 开发进度
    • Getting in touch
    • 启动 Varnish
    • 让 Varnish 监听在 80 端口
    • 后端服务器
    • 特性
    • Now what

    Varnish 缓存代理的基本原理


    Varnish 是一个 HTTP 缓存代理,它从 client 接受请求,并尝试从缓存中响应请求。如果无法从缓存中提供响应,Varnish 向后端服务器发起请求,获取响应,将响应存储在缓存中,然后把响应发送给 client。

    如果 Varnish 能够从 Cache 中响应一个请求,所消耗的时间是微秒级别的,这个响应速度比直接从 HTTP 服务器响应请求的速度要快两个数量级,所以缓存命中率越高,网站的访问速度就越快。

    根据从后端服务器获取的 HTTP 响应,Varnish 会决定是否对其进行缓存。后端服务器可以使用 response header Cache-Control 主动告诉 Varnish 缓存这个响应。有几种情况 Varnish 是不缓存响应的,最典型的情况,是 HTTP 响应中使用了 cookies,因为 cookie 是关于某个特定用户的,所以缓存意义不大,Varnish 默认不缓存这样的响应。

    使用 Varnish 配置语言 - Varnish Configuration Language (VCL),可对 Varnish 的行为和功能进行配置,详细的介绍参考 Varnish Users Guide。

    性能


    Varnish 拥有现代的架构,设计时着眼于性能。性能通常只与网络的速度相关,有效的性能调优不是很重要。你可将注意力放在配置 web 的工作上,对于性能和可扩展性则不需要太关心。

    灵活性


    Varnish 除了其优秀的性能,另一个最大的特性是其配置语言的灵活性。使用 VCL 写的规则,让你可以对入站的请求进行控制。比如,选择提供什么样的内容服务,从哪里获取内容,请求和响应将被如何修改。

    支持的平台


    Varnish 支持 Linux 和 FreeBSD 以及 OS X 等其他操作系统。

    Varnish 开发进度


    Varnish 是一个社区驱动的项目..

    Getting in touch


    联系方式..

    启动 Varnish


    本小节适用于: Ubuntu, Debian, Red Hat Enterprise Linux or CentOS.

    安装好 Varnish 之后,启动 Varnish:service varnish start

    现在 Varnish 已经启动了。我们来确认一下,使用浏览器访问 http://127.0.0.1:6081/,注意将 IP 地址替换为你的运行 Varnish 的机器的 IP地址。根据默认的配置,Varnish 会尝试将请求转发到一个 web 应用,默认转发给本机的 8080 端口:http://127.0.0.1:8080。

    如果没有 web 应用在 http://127.0.0.1:8080 运行,Varnish 会返回一个错误。Varnish 对于返回错误信息总是很谨慎的,不管是什么错误,Varnish 总是返回 "Error 503 Service Unavailable"。

    可能你的 web 应用跑在其他地址上,让我们修改配置文件,指向这些 web 应用。

    使用你最喜欢的编辑器打开 /etc/varnish/default.vcl 文件。其中多数被注释了,其中可能有如下内容:

    vcl 4.0;
    
    backend default {
        .host = "127.0.0.1";
        .port = "8080";
    }
    

    我们可以修改它,使其指向你的 web 服务器。我们这里使用 http://www.varnish-cache.org/

    vcl 4.0;
    
    backend default {
        .host = "varnish-cache.org";
        .port = "80";
    }
    

    现在执行 service varnish reload 重新加载配置文件,如果成功了,使用浏览器访问 http://127.0.0.1:6081/,(记得替换IP地址),你会看见一个目录列表。为什么是看到目录列表呢,因为你的 client 没有发送适当的 Host header,所以显示默认的 webfolder。

    让 Varnish 监听在 80 端口


    现在我们的 Varnish 监听于 6081 端口,这个端口用于调试是不错的。我们现在让 Varnish 监听在 HTTP 的默认端口: 80 端口。

    首先关闭 Varnish:service varnish stop

    现在我们需要编辑启动 Varnish 的配置文件:

    Debian/Ubuntu

    On Debian/Ubuntu this is /etc/default/varnish. In the file you'll find some text that looks like this:

    DAEMON_OPTS="-a :6081
    -T localhost:6082
    -f /etc/varnish/default.vcl
    -S /etc/varnish/secret
    -s malloc,256m"
    Change it to:

    DAEMON_OPTS="-a :80
    -T localhost:6082
    -f /etc/varnish/default.vcl
    -S /etc/varnish/secret
    -s malloc,256m"

    Red Hat Enterprise Linux / CentOS

    在 RHEL/CentOS 上,配置文件是 /etc/sysconfig/varnish,除了上面这种配置,另外还有一种参数配置的方法:

    #VARNISH_LISTEN_ADDRESS=
    VARNISH_LISTEN_PORT=80
    

    不指定 VARNISH_LISTEN_ADDRESS,表示监听本地所有地址。这些参数会被引用:

    DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
                 -f ${VARNISH_VCL_CONF} \
                 -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
                 -t ${VARNISH_TTL} \
                 -p thread_pool_min=${VARNISH_MIN_THREADS} \
                 -p thread_pool_max=${VARNISH_MAX_THREADS} \
                 -p thread_pool_timeout=${VARNISH_THREAD_TIMEOUT} \
                 -u varnish -g varnish \
                 -S ${VARNISH_SECRET_FILE} \
                 -s ${VARNISH_STORAGE}"
    

    重启 Varnish: service varnish start

    现在 Varnish 就会监听在 80 端口了。

    现在所有对你的站点的访问,都会经过 Varnish 的处理。

    后端服务器


    在 Varnish 中有 backend servers 或者 origin servers 的概念,可称之为后端 web 服务器。后端 web 服务器通过 Varnish 的缓存功能对访问进行加速。

    我们来编辑配置文件,如果是编译安装,路径为 /usr/local/etc/varnish/default.vcl,如果是软件包安装,路径为 /etc/varnish/default.vcl

    刚才我们已经编辑过:

    vcl 4.0;
    
    backend default {
        .host = "www.varnish-cache.org";
        .port = "80";
    }
    

    这表示 Varnish 为 http://www.varnish-cache.org:80 做缓存代理。

    现在配置 Varnish 为自己的 web 应用的缓存代理。刚才我们已经配置 Varnish 监听于 80 端口,现在配置后端服务器地址:

    vcl 4.0;
    
    backend default {
      .host = "127.0.0.1";
      .port = "8080";
    }
    

    Varnish 可定义多个后端服务器,并且可以联合多个后端服务器为一个后端集群,进行负载均衡。

    下面我们看看 Varnish 的特别之处,以及如何利用这些特性。

    特性


    Varnish 跟其他程序相比有一些特别的特性,其中一个我们已经介绍过 - VCL。下面我们将快速过一下其他重要的特性:

    Configuration

    Varnish 的配置使用 VCL 编写。Varnish 启动时,其配置被转换为 C 代码,然后交给 C 编译器编译,然后被加载和执行。

    所以,与其他程序的配置不同,Varnish 的配置不是打开或关闭某些选项,而是使用 VCL 编写对入站访问流量的处理策略。

    varnishadm

    Varnish 拥有一个 admin console,你可以通过 varnishadm 命令连接该 console。为了进行连接认证,执行 varnishadm 命令的用户必须对 /etc/varnish/secret 文件有可读权限。

    一旦启动了 console,你可对 Varnish 做一些操作。比如:启动或关闭 cache 进程,加载 VCL,调整负载均衡策略,调整失效的缓存内容。

    通过内置命令 help,可获取操作的帮助。

    varnishlog

    Varnish 的日志不会存入磁盘,而是存入一块内存空间中。Varnish 的日志被“流式化”。任何时候,你都可以连接到日志流,查看正在发生什么。Varnish 日志会记录很多信息,可以通过 varnishlog 命令查看日志流。

    Now what


    本文档的介绍到此结束,下面我们可以学习 Varnish Users Guide。

    相关文章

      网友评论

          本文标题:Varnish 导览

          本文链接:https://www.haomeiwen.com/subject/ypwmjttx.html