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

问题描述 投票:0回答:2

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

用例:

情况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,最好只有一个代理:s
  • 三个URL:s可能有不同的路径(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中的一个用来代替主机名,而且我不确定创建一个导演是正确的方法。原因是我无法控制主机名,也不能保证IP地址不会改变。

问题:

  1. 是否有可能以某种方式在Varnish中完成这项工作?
  2. 有人可以准确解释Squids配置应该如何工作,如上面的用例和要求(如果可能)?
  3. 有没有其他缓存代理服务可能比Varnish或Squid更好?
caching proxy varnish squid varnish-vcl
2个回答
1
投票

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

它不是开源的,但它解决了你的问题。


0
投票

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

也可以做到3。例如,通过HTTP PURGE请求。只需确保将白名单加入白名单即可。 https://www.varnish-software.com/wiki/content/tutorials/varnish/vcl_examples.html#

© www.soinside.com 2019 - 2024. All rights reserved.