Squid 缓存相关配置和日志查看

在 ubuntu 18.04 中,squid 的配置文件默认位置为:/etc/squid/squid.conf,访问日志默认保存在 /var/log/squid/access.log

缓存配置

cache_dir aufs /var/spool/squid 100000 16 256
cache_mem 1024 MB
maximum_object_size_in_memory 2 MB
maximum_object_size 80 MB

cache_dir 后面的参数非常重要,其中 100000 说明可以分配硬盘上 100GB 的空间用于保存缓存。默认情况下只有 100MB,所以会发现之前的缓存没有生效,因为超出 100MB 后,会用 LRU 的策略清除缓存。

maximum_object_size 参数也比较重要,有时候文件没有缓存,是因为这个值太小了,导致稍微大一些的文件就没有被缓存,需要重新下载。

权限配置

squid 默认只限本地访问,如果需要其它机器访问,需要指定可访问的机器的 IP。首先,需要找到 http_access deny all 这一行,在这一行前面添加:

acl permittedips src 192.168.0.0/16
acl permittedips src 172.0.0.0/8
http_access allow permittedips

其中,限制可访问 IP 地址的方式是指定子网和掩码,如上所述,192.168.0.0/16 表示允许以 192.168 开头的所有 IP 地址访问。permittedips是自定义的变量名,每个变量名相当于是一个数组,可以容纳多个子网和掩码的组合。

每当修改配置文件后,需要重启 squid 服务。可以执行:systemctl restart squid,或者 service squid restartsystemctl 是推荐使用的方式,有很多 init.d 没有的高级功能,相关内容可以参考:

日志阅读

当发现访问某个链接没有生效时,需要去访问日志中确认原因。访问日志的默认位置为 /var/log/squid/access.log,也可以在配置文件中修改:

access_log daemon:/var/log/squid/access.log squid

默认情况下,日志输出如下:

1553684143.879      0 172.17.0.2 TCP_MEM_HIT/200 50109 GET http://mirrors.aliyun.com/debian/pool/main/u/unrtf/unrtf_0.21.9-clean-3_amd64.deb - HIER_NONE/- application/octet-stream
1553684143.879 0 172.17.0.2 TCP_MEM_HIT/200 170627 GET http://mirrors.aliyun.com/debian/pool/main/u/unzip/unzip_6.0-21_amd64.deb - HIER_NONE/- application/octet-stream
1553684143.883 4 172.17.0.2 TCP_MEM_HIT/200 234749 GET http://mirrors.aliyun.com/debian/pool/main/z/zip/zip_3.0-11%2bb1_amd64.deb - HIER_NONE/- application/octet-stream
1553684143.884 0 172.17.0.2 TCP_MEM_HIT/200 18108 GET http://mirrors.aliyun.com/debian/pool/main/d/docx2txt/docx2txt_1.4-0.1_all.deb - HIER_NONE/- application/octet-stream

其中 TCP_MEM_HIT 这个位置的字段最为重要,一般有下列情况:

TCP_DENIED # 表示请求被拒绝,一般因为请求的 IP 不符合条件
TCP_MISS # 表示没有找到缓存
TCP_TUNNEL # 一般因为这是一个 https 请求,https 请求无法被缓存
TCP_MEM_HIT # 在内存缓存中找到请求的内容,直接发给客户
TCP_HIT # 在硬盘缓存中找到请求的内容,直接发给客户
TCP_REFRESH_UNMODIFIED

上面尤其要注意的是,https 请求是无法被缓存的,在日志中会显示 TCP_TUNNEL

如果请求没有在日志中找到,说明请求时 Proxy 配置有问题。这是,可以用命令行测试,执行:

export http_proxy=http://192.168.0.125:3128;export https_proxy=http://192.168.0.125:3128; # 192.168.0.125 和 3128 需要根据实际替换
curl http://www.baidu.com/

然后到日志的最后查看是否多了一行请求 www.baidu.com 的记录。

更多字段可以参考:https://wiki.squid-cache.org/SquidFaq/SquidLogs#access.log

发表评论

电子邮件地址不会被公开。 必填项已用*标注

使用多进程加速 make 的编译过程
Previous post
docker compose 传入变量到 Dockerfile
Next post