我想为下载的文件build立一个caching服务器。 一个麻烦就是我希望它能够与HTTPS一起工作(包括从HTTP到HTTPS的redirect)。 我理解这个问题的常见问题,但是对于我来说,这不是一个透明的代理。 例如:
# Usually you'd do something like this: curl --proxy myserver:8080 https://example.com/file.tar.gz # But it's fine for our scripts to call something like this instead: curl myserver:8080 --data-raw https://example.com/file.tar.gz
请注意,这里的客户端是特别指挥其在myserver的请求,所以它不会尝试并validation来自example.com的响应。 (我的服务器应该!)
另一个扭曲是这只会用于永远不会改变的文件(url包括版本号),所以关于caching新鲜度通常的东西不适用。 如果文件(或redirect响应)被caching,则应该返回而不检查互联网。 caching的副本应该在上次请求后的某个固定时间段内被删除,而不pipe第一次下载的时间。
问题:我曾希望使用像Squid这样的HTTP代理,但是我看不到如何configuration它来做这样的事情。 另外,写一些代码是一个选项,但我宁愿避免这一点。 我能做些什么来build立这样的caching?
背景:在构buildDocker镜像和开发人员在容器之外构build时,这主要用于我们在源代码中使用的第三方库。 有时我们目前检查我们自己的回购第三方代码,但这并不理想。 我敢肯定,我们不是唯一面临这个问题的人,但我无法在网上find一个好的解决scheme…也许我只是错过了正确的search词。
这是可能的,并且需要三个configuration更改:
你应该知道,在configurationSSL bump之后,squid将为每个被configuration为冲突的域创build一个自签名的证书。 您的客户必须接受此证书才能进行转账。 cURL可以通过–cacert参数(允许接受其公钥出现在列表中的CA)或-k参数(完全禁用SSL检查)来完成。
另外,上面发布的两个cURL命令的工作方式也有一些细微差别(但很重要)。 第一个会导致cURL打开一个连接,就好像它正在对一个代理(即开放端口)发言,发出一个“CONNECT”语句,然后等待SSL握手发生,然后开始说HTTP。 第二次调用将导致cURL打开连接并立即尝试SSL握手。 在这种情况下,主机(运行Squid)必须找出连接哪个主机,通常来自握手的SNI部分。 Squid可以做到这一点,但你需要使用https_port透明语句来configuration它。 如果可以的话,我会build议通过第一种方法来做,因为它需要在Squid端configuration较less,并且在客户端清楚地说明涉及代理。