Arch Linux下Squid 6代理SSL请求无法缓存的配置排查
Squid SSL缓存失效问题解决
核心问题分析
你当前的Squid配置存在两个关键问题,导致HTTPS请求仍以TCP_TUNNEL方式转发而未被缓存:
- 端口冲突:
http_port和https_port使用了同一个端口(13000),Squid无法正确区分并处理HTTPS的解密请求 - SSL Bump规则不完整:缺少必要的证书信任配置,导致Squid无法完成HTTPS流量的解密与缓存
具体修改步骤
1. 修复端口配置
将HTTP和HTTPS代理端口分开,或者用单端口同时处理两种请求:
方案一:分端口配置
修改squid.conf中的端口部分:
# 处理普通HTTP请求的代理端口 http_port 13000 # 处理HTTPS请求的SSL Bump端口 https_port 13001 ssl-bump \ generate-host-certificates=on \ dynamic_cert_mem_cache_size=4MB \ tls-cert=/etc/squid/myCA.pem \ options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1
方案二:单端口处理所有请求(推荐)
让同一个端口同时处理HTTP和HTTPS的显式代理请求:
http_port 13000 ssl-bump \ generate-host-certificates=on \ dynamic_cert_mem_cache_size=4MB \ tls-cert=/etc/squid/myCA.pem \ options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1
2. 补充SSL Bump必要配置
在squid.conf中添加以下规则,确保Squid可以信任自签名证书并解密HTTPS流量:
# 允许Squid使用自定义CA证书处理SSL请求 sslproxy_cert_error allow all # 跳过后端服务器证书验证(避免因证书链问题导致缓存失败) sslproxy_flags DONT_VERIFY_PEER # SSL Bump规则:先解析请求再解密所有流量 ssl_bump stare all ssl_bump bump all
3. 优化缓存规则(可选)
添加专门针对HTTPS的缓存过期规则,确保更多内容被缓存:
# 针对HTTPS内容的缓存策略,与HTTP保持一致 refresh_pattern ^https:// 0 20% 4320
4. 生效配置并验证
- 初始化缓存目录(首次配置或修改缓存路径时执行):
squid -z
- 重启Squid服务:
systemctl restart squid
浏览器代理配置:
- 若用分端口方案:设置HTTP代理为
你的服务器IP:13000,HTTPS代理为你的服务器IP:13001 - 若用单端口方案:只需设置HTTP代理为
你的服务器IP:13000,浏览器会自动通过该端口处理HTTPS请求
- 若用分端口方案:设置HTTP代理为
验证缓存效果:
访问HTTPS网站后,查看Squid的access.log,若出现类似TCP_MEM_HIT/200或TCP_DISK_HIT/200的记录,说明缓存生效。
额外注意事项
- 确保缓存目录权限正确:
chown -R squid:squid /var/cache/squid
- 浏览器必须信任你生成的
myCA.pem证书,否则会出现安全警告(你已完成此步骤,可忽略)
内容的提问来源于stack exchange,提问作者Jfm Meyers
相关产品推荐
相关产品推荐

