清漆:具有多个IP的后端(或使用其他东西)

时间:2019-04-03 17:42:58

标签: caching proxy varnish squid varnish-vcl

我正在开发一个连接到外部后端服务(从另一家公司购买)的系统,该系统将大大超出每月的请求配额。我正在尝试创建一个代理/缓存来缓存请求,并使用缓存的响应(如果存在的话)。

用例:

案例1:

  1. 用户请求端点
  2. 代理没有缓存
  3. 代理将请求转发到外部后端
  4. 代理缓存响应
  5. 代理将响应返回给用户

案例2:

  1. 用户请求端点
  2. 代理已缓存
  3. 代理返回缓存的响应

案例3:

  1. 外部后端发送webhook表示事情已更新
  2. 代理清除缓存

要求:

  • 代理服务器必须能够缓存文件(主要是图像)
  • 需要访问的三个不同的URL:url1.external-backend.com,url2.external-backend.com和url3.external-backend.com
  • 最好是所有三个URL的唯一代理:
  • 三个URL:可能具有不同的路径(url1.external-backend.com/this/is/a/path),也可能具有查询(url1.external-backend.com?query=something)
  • 如果可以根据从外部后端发送的内容清除代理,那就很好了,但这不是必需的

到目前为止的想法:

到目前为止,我已经研究了两种不同的系统,分别是Varnish(https://varnish-cache.org/)和Squid(http://www.squid-cache.org/)。我尝试过Squid,但我根本不了解如何设置配置以像上面那样工作。样本配置文件确实很乱,无法理解,我也找不到在线的指南。

我调查了Varnish,据我所知可能可以使用。但是我在这里有问题。

问题:

在Varnish的/etc/varnish/default.vcl中,可以添加后端,因此我添加了以下内容:

backend page2 {
    .host = "url2.external-backend.com";
    .port = "443";
}

这提供了类似的内容(我不记得了,现在也看不到错误消息):

Backend host "url2.external-backend.com": resolves to multiple IPv4 addresses.
Only one address is allowed.
Please specify which exact address you want to use, we found these:
        xxx.xxx.xxx.xxx
        xxx.xxx.xxx.xxx
        xxx.xxx.xxx.xxx

我不敢用IP:s代替主机名,而且我不确定创建导演是正确的方法。原因是我无法控制主机名,并且他们不能保证IP地址不会更改。

问题:

  1. 是否可以用Varnish进行这项工作?
  2. 有人能确切解释Squids配置看起来像上面的用例和要求一样吗(如果可能)?
  3. 是否还有其他比Varnish或Squid更好的缓存代理服务?

2 个答案:

答案 0 :(得分:1)

我相信您正在寻找vmod-goto:https://docs.varnish-software.com/varnish-cache-plus/vmods/goto/

它不是开源的,但可以完全解决您的问题。

答案 1 :(得分:0)

1和2可以毫无问题地完成。对于基于循环DNS的后端(相同的名称为每个请求提供不同的IP),您应该查看对循环具有特定支持的控制器:https://www.varnish-software.com/wiki/content/tutorials/varnish/multiple_varnishes.html#

3也可以完成。例如通过HTTP PURGE请求。只需确保将哪些IP列入白名单即可。 https://www.varnish-software.com/wiki/content/tutorials/varnish/vcl_examples.html#