Cache

如何強制流式圖像對象由 Squid 正向代理記憶體

  • February 8, 2021

我正在訪問儲存在 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 文件中可能有一個特定的記憶體指令是必需的。

您正在通過 Squid 代理使用 HTTP CONNECT 方法,它完全繞過了它的記憶體以及 Squid 所做的幾乎所有其他事情。

相反,您應該將其作為普通 HTTP 代理連接到它,快速查看npmjs.com 上的 got 頁面表明應該使用hpagent包完成。

引用自:https://serverfault.com/questions/1052805