修复用于缓存代理的 Squid 配置?

问题描述

我正在尝试进行一个设置,其中 Squid 将充当透明转发代理,并启用缓存。我依赖于这样的设置: https://aws.amazon.com/blogs/security/how-to-add-dns-filtering-to-your-nat-instance-with-squid/

我遇到的问题是,当我配置所有内容时,通过代理的测试服务器实际上并没有缓存任何内容,而如果我尝试从代理本身(使用 squidclient)进行测试,它会缓存。 因此,当测试服务器查找我存储在云中某处的图片时,鱿鱼访问日志显示“TCP_TUNNEL/200”。 但是当我使用 squidclient 工具从代理本身尝试时,我得到“TCP_MEM_HIT/200”(第一次错过,在它被缓存之前),所以缓存工作正常。

我已将重新路由添加到 IP 表中,源和目标检查已禁用(AWS 设置),总体而言,流量按预期进行。我假设我需要对配置进行一些更改,因为那部分是我必须复制大部分内容并且经验最少的地方。 我已经按照文档生成了证书,我的配置与那里的配置大致相同:

visible_hostname squid
cache_dir ufs /squid/cache 10000 16 256

# Handle HTTP requests
http_port 3128
http_port 3129 intercept
acl allowed_http_sites dstdomain .amazonaws.com
http_access allow allowed_http_sites

# Handle HTTPS requests
https_port 3130 cert=/etc/squid/ssl/squid.pem ssl-bump intercept
acl SSL_port port 443
http_access allow SSL_port
acl allowed_https_sites ssl::server_name .amazonaws.com
acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3
ssl_bump peek step1 all
ssl_bump peek step2 allowed_https_sites
ssl_bump splice step3 allowed_https_sites
ssl_bump terminate step3 all

http_access deny all

白名单有效,大多数其他一切也有效,所以唯一缺少的是squid没有缓存测试服务器请求的内容,而只是通过它。 知道我需要更改哪些配置才能解决此问题吗?

解决方法

这在通过测试服务器访问代理时不起作用的原因是您正在对 HTTP 请求进行隧道传输。当您通过隧道传输 HTTP 请求时,即使用 CONNECT 方法(当您通过 https 访问图像时会自动发生),所有缓存都将被绕过。您无法缓存隧道请求,因为 Squid 无法看到通过它传递的实际数据 - 它代理将返回数据作为 TCP 数据包直接返回给客户端。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...