Cache
如何強制流式圖像對象由 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 文件中可能有一個特定的記憶體指令是必需的。
您正在通過 Squid 代理使用 HTTP CONNECT 方法,它完全繞過了它的記憶體以及 Squid 所做的幾乎所有其他事情。
相反,您應該將其作為普通 HTTP 代理連接到它,快速查看npmjs.com 上的 got 頁面表明應該使用hpagent包完成。