Squid 不从 npm 缓存,而是从 curl 缓存

Squid 不从 npm 缓存,而是从 curl 缓存

我希望我在这里是盲目的,但我正在尝试缓存注册中心非常积极地使用 squid,但实际上无法使其工作。

我已经用编译了 squid --enable-http-violations,并且在启动时收到警告,并且我正在使用以下缓存行:

refresh_pattern -i registry.npmjs.org/.* 900 20% 4320 ignore-no-store ignore-auth ignore-private ignore-no-cache ignore-reload override-expire override-lastmod

现在,使用 curl 时,它似乎可以按预期进行缓存,但使用 npm 客户端时则不行。我已将两个日志放在下面,但我看不出是什么标头/差异导致一个缓存,而另一个不缓存

使用 curl (按预期缓存):

1488230087.926      0 127.0.0.1 TCP_MEM_HIT/200 2710 GET http://registry.npmjs.org/should-util - HIER_NONE/- application/json [User-Agent: curl/7.51.0\r\nAccept: */*\r\nProxy-Connection: Keep-Alive\r\nHost: registry.npmjs.org\r\n] [HTTP/1.1 200 OK\r\nServer: nginx/1.10.1\r\nContent-Type: application/json\r\nLast-Modified: Mon, 08 Aug 2016 15:17:14 GMT\r\nETag: "57a8a27a-871"\r\nCache-Control: max-age=300\r\nContent-Length: 2161\r\nAccept-Ranges: bytes\r\nDate: Mon, 27 Feb 2017 20:44:44 GMT\r\nVia: 1.1 varnish\r\nAge: 0\r\nX-Served-By: cache-lcy1134-LCY\r\nX-Cache: MISS\r\nX-Cache-Hits: 0\r\nX-Timer: S1488228284.071646,VS0,VE18\r\nVary: Accept-Encoding\r\nConnection: keep-alive\r\n\r]

使用 npm 客户端(不缓存):

1488230089.133     89 127.0.0.1 TCP_MISS/304 368 GET http://registry.npmjs.org/should-util - HIER_DIRECT/151.101.16.162 - [Accept-Encoding: gzip\r\nversion: 4.1.2\r\nAccept: application/json\r\nReferer: view should-util\r\nnpm-session: 169f8528ea8fd926\r\nnpm-in-ci: false\r\nUser-Agent: npm/4.1.2 node/v7.6.0 linux x64\r\nIf-None-Match: W/"57a8a27a-871"\r\nIf-Modified-Since: Mon, 08 Aug 2016 15:17:14 GMT\r\nConnection: keep-alive\r\nHost: registry.npmjs.org\r\n] [HTTP/1.1 304 Not Modified\r\nDate: Mon, 27 Feb 2017 21:14:49 GMT\r\nVia: 1.1 varnish\r\nCache-Control: max-age=300\r\nETag: W/"57a8a27a-871"\r\nAge: 83\r\nX-Served-By: cache-lcy1132-LCY\r\nX-Cache: HIT\r\nX-Cache-Hits: 2\r\nX-Timer: S1488230089.111498,VS0,VE0\r\nVary: Accept-Encoding\r\nConnection: keep-alive\r\n\r]

答案1

在使用 nginx proxy_cache 为 NPM 缓存代理对象时,我们遇到了类似的问题 - 在 speedtest.net 我们最终使用了这个项目:https://github.com/mixu/npm_lazy用于缓存对 NPM 的请求。它对私有模块也非常有效。我们已经在 40,000 多个构建中使用它,没有出现任何问题,并且它处理 npm 中断时也没有出现任何问题。

话虽如此,我们在使用 Yarn 时还是遇到了一些问题,不过这可能是 Yarn 的问题。

相关内容