🔗 Feature: 将 Squid 链接到缓存层次结构
- 目标:将多个 Squid 连接起来,形成一个“网状”或缓存层次结构。
- 状态:已完成。
- 版本: 1.2
🔗 详细信息
代理和缓存层次结构由两种基本的对等链接构成。父级链接(显示为绿色)和同级链接(显示为蓝色)。

这两个简单的连接可以以任意数量复杂的层次结构组合。例如,这个由 6 个同级缓存组成的集群,通过一个网关代理在它们之间进行负载均衡。

🔗 如何配置 Squid 将所有请求转发到另一个代理?
首先,您需要使用 cache_peer 指令为 Squid 提供一个父缓存。其次,您需要使用 never_direct 指令告诉 Squid 它不能直接连接到源服务器。这通过以下配置文件行来实现:
cache_peer parentcache.foo.com parent 3128 0 no-query default
never_direct allow all
请注意,使用此配置,如果父缓存失败或变得不可达,则每个请求都将导致错误消息。
如果您希望在所有父级都发生故障时能够使用直接连接,您应该采用不同的方法。
cache_peer parentcache.foo.com parent 3128 0 no-query
prefer_direct off
nonhierarchical_direct off
在没有收到肯定的 ICP、HTCP 等回复的情况下,Squid 的默认行为是连接到源服务器,而不是使用父级。 prefer_direct off 指令告诉 Squid 在 DNS 列出的服务器之前先尝试父级。
某些类型的请求无法缓存,或者通过直接连接可以更快地获得服务,Squid 默认情况下会优化将它们通过直接连接发送。 nonhierarchical_direct off 指令告诉 Squid 仍然通过父级发送这些请求。
hierarchy_stoplist 指令是另一个会导致流量直接(DIRECT)而不是发送到对等节点(peer)的指令。如果存在,它应该在 Squid-3.2 及更高版本的配置中被完全移除。
🔗 如何加入缓存层次结构?
要将您的缓存置于层次结构中,请在 squid.conf 中使用 cache_peer 指令指定父节点和同级节点。
例如,childcache.example.com 上的以下 squid.conf 文件将其缓存配置为从一个父缓存和两个同级缓存检索数据。
# squid.conf - On the host: childcache.example.com
#
# Format is: hostname type http_port udp_port
#
cache_peer parentcache.example.com parent 3128 3130
cache_peer childcache2.example.com sibling 3128 3130
cache_peer childcache3.example.com sibling 3128 3130
cache_peer_domain 已弃用,并且在当前 Squid 版本中不再可用。
cache_peer_access 指令允许您为特定域指定某些缓存作为同级或父级。
# squid.conf - On the host: sv.cache.nlanr.net
#
# Format is: hostname type http_port udp_port
#
cache_peer electraglide.geog.unsw.edu.au parent 3128 3130
cache_peer cache1.nzgate.net.nz parent 3128 3130
cache_peer pb.cache.nlanr.net parent 3128 3130
cache_peer it.cache.nlanr.net parent 3128 3130
cache_peer sd.cache.nlanr.net parent 3128 3130
cache_peer uc.cache.nlanr.net sibling 3128 3130
cache_peer bo.cache.nlanr.net sibling 3128 3130
acl unsw dstdomain .au
cache_peer_access electraglide.geog.unsw.edu.au allow unsw
acl nzgate dstdomain .au .aq .fj .nz
cache_peer_domain cache1.nzgate.net.nz allow nzgate
acl nlanr-eu dstdomain .uk .de .fr .no .se .it
cache_peer_domain pb.cache.nlanr.net allow nlanr-eu
cache_peer_domain it.cache.nlanr.net allow nlanr-uk
acl nlanr-sa dstdomain .mx .za .mu .zm
cache_peer_domain sd.cache.nlanr.net allow nlanr-sa
上面的配置表明,对于 uk、de、fr、no、se 和 it 域,缓存将使用 pb.cache.nlanr.net 和 it.cache.nlanr.net;对于 mx、za、mu 和 zm 域,将使用 sd.cache.nlanr.net;对于 au、aq、fj 和 nz 域,将使用 cache1.nzgate.net.nz。
🔗 如何加入 NLANR 的缓存层次结构?
目前(2022 年 12 月)尚不清楚。
🔗 为什么我应该加入 NLANR 的缓存层次结构?
NLANR 层次结构可以为您提供父级或同级缓存的初始来源。加入 NLANR 全球缓存系统将显著提高您的缓存服务的性能。
🔗 如何向 NLANR 的注册服务注册我的缓存?
只需在您的 squid.conf 中启用这些选项,即可完成注册。
cache_announce 24
announce_to sd.cache.nlanr.net:3131
公告您的缓存不等于加入 NLANR 缓存层次结构。您可以在不注册的情况下加入 NLANR 缓存层次结构,也可以在不加入 NLANR 缓存层次结构的情况下注册。
🔗 如何找到离我更近的其他缓存并与它们建立父/子/同级关系?
访问 NLANR 缓存 注册数据库,以发现您附近的其他缓存。请记住,仅仅因为一个缓存已在数据库中注册,并不意味着它们愿意成为您的父级/同级/子级。但问问也无妨……
🔗 故障排除
🔗 我的缓存注册未出现在 Tracker 数据库中。
- 如果您的缓存 IP 地址没有 DNS PTR 记录,您的站点将不会被列出。如果我们无法将 IP 地址映射回域名,它将被列为“未知”。
- 注册消息使用 UDP 发送。由于阻止 UDP 的防火墙,或者由于拥塞而丢弃数据包,我们可能无法收到您的公告消息。
类别:功能
导航:站点搜索,站点页面,类别,🔼 向上