如何强制流图像对象由 Squid 正向代理缓存

如何强制流图像对象由 Squid 正向代理缓存

我正在访问存储在 AWS S3 或 GCS 等存储器上的图像。

我正在使用名为 Got 的节点库来获取图像,然后将响应流式传输到图像处理器中。

我正在使用 Got 和隧道代理,以便它使用我的 Squid 正向代理。我将通过 Squid 进行操作,因为我想缓存图像,这样我就不必总是一路前往 S3 来获取图像。

但是,我的图片没有被缓存。每次通过 Squid 获取图片时都会出现以下日志消息:

1612789358.530   3100 172.22.0.3 TCP_TUNNEL/200 2296639 CONNECT storage.googleapis.com:80 - HIER_DIRECT/172.217.170.80 -

我添加了一个refresh_pattern指令来强制缓存。

refresh_pattern . 0 100% 525600 override-expire override-lastmod ignore-reload ignore-no-cache ignore-no-store reload-into-ims ignore-must-revalidate

这应该可以将所有内容缓存一年。

相关的 javascript 是这个(以防万一)

let stream = await got.stream(sourceUrl, {
  agent: {
    http: tunnel.httpOverHttp({
      proxy: {
        host: "localhost",
        port: "3128",
      },
    }),
  },
});

我没有使用过 Squid - 我使用的是 4.x 版本

是不是因为我正在从 S3 流式传输响应,所以一旦整个图像响应流式传输完毕,Squid 就无法缓存响应?或者我的 squid.conf 文件中可能存在所需的特定缓存指令。

答案1

您正在使用 Squid 代理的 HTTP CONNECT 方法,它完全绕过缓存以及 Squid 所做的几乎所有其他事情。

你应该将它作为普通的 HTTP 代理进行连接,快速看一下got 在 npmjs.com 的页面表示应该用陣陣代理包裹。

相关内容