Dusktown

使用Varnish自建CDN

使用Varnish自建CDN

看到这篇文章,你也许会问:市面上有那么多现成的CDN:阿里的CDN,亚马逊的CDN,为什么还要自建CDN呢? 那些CDN虽然好用,但是贵的离谱,我这种学生党穷,没办法。

基本思路:用Varnish做缓存,然后用智能DNS,可以使用亚马逊的Router 53,或者阿里云的DNS解析(这个只可以选运营商线路)。

由于资金原因,这里我选用阿里云免费的DNS解析

  1. 安装Varnish
apt install varnish
  1. 配置Varnish

一般情况下,配置文件在/etc/varnish/目录下

先备份一下

cp /etc/varnish/default.vcl /etc/varnish/default.vcl.bak

Varnish使用vcl(Varnish Configuration Language)作为配置文件的语言

下面介绍几个模块

  1. vcl_recv

在接收到完整的请求并进行解析之后,重新启动之后或ESI包含结果之后,在请求开始时调用。 其目的是决定是否满足请求,可能对其进行修改并决定如何进一步处理它。 后端提示可以被设置为后端处理侧的默认值。

  1. vcl_pipe

进入管道模式时调用。 在这种模式下,请求将传递到后端,而来自客户端和后端的任何其他数据都将保持不变,直到任一端关闭连接为止。 基本上,Varnish会降级为简单的TCP代理,来回移动字节。 对于管道模式下的连接,在vcl_pipe之后将再没有其他VCL子例程被调用。

  1. vcl_pass

进入通过模式时调用。 在这种模式下,请求将传递到后端,后端的响应将传递到客户端,但不会输入到缓存中。 通过同一客户端连接提交的后续请求将得到正常处理。

  1. vcl_hash

在vcl_recv之后调用,以为请求创建哈希值。 这用作在Varnish中查找对象的键。

  1. vcl_purge

在执行清除并清除所有其变体之后调用。

  1. vcl_miss

如果在高速缓存中未找到请求的文档,或者如果vcl_hit返回访存,则在高速缓存查找之后调用。 其目的是确定是否尝试从后端检索文档。 后端提示可以被设置为后端处理侧的默认值。

  1. vcl_hit

如果在高速缓存中未找到请求的文档,或者如果vcl_hit返回访存,则在高速缓存查找之后调用。 高速缓存查找成功时调用。 被击中的对象可能是陈旧的:它可以具有零或负的ttl,仅保留宽限期或保留时间。

  1. vcl_deliver

在将vcl_synth结果以外的任何对象传递给客户端之前调用。

  1. vcl_synth

调用以传递合成对象。 在VCL中生成一个合成对象,而不是从后端获取。 它的主体可以使用Synthesis()函数构造。 与vcl_backend_error定义的对象相反,vcl_synth定义的对象从不进入缓存,而vcl_backend_error定义的对象可能会进入缓存。

以上翻译自https://varnish-cache.org/docs/6.0/users-guide/vcl-built-in-subs.html

编辑default.vcl文件,假如我们有一个服务运行在8080端口,首先定义一个后台

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

当Varnish需要从后端拉取数据时,它会根据以上定义的进行访问

  1. 配置智能DNS

未完待续...

相关文章

评论