Squid Web Cache Wiki

Squid Web Cache 文档

🔗 在系统上运行多个 Squid 实例

在系统上运行多个 Squid 实例并不难,但它需要管理员确保它们不会相互干扰,并且知道如何识别对方以避免转发循环(或被错误检测到的转发循环)。

🔗 SMP 启用的 Squid

:information_source: Squid-3.5 提供了 -n 命令行选项,用于为启动的每个 Squid 实例配置一个唯一的服务名称。SMP 感知进程的每组进程将仅与其他使用相同服务名称的进程进行交互。服务名称始终存在,当命令行中缺少 -n 选项时,将使用默认服务名称 squid

:information_source: 服务名称只能包含 ASCII 字母数字值(a-z、A-Z、0-9)。

当使用非默认服务名称运行 squid 时,所有其他命令行选项都需要使用 -n 服务名称来定位正在控制的服务。这包括 -z 选项,因为某些缓存类型需要 SMP 感知处理。

即使在使用服务名称的情况下,下面概述的配置指令仍然需要配置唯一值。

${service_name} 已添加到 squid.conf 处理中。它会扩展为解析配置文件进程的服务名称。

🔗 相关的 squid.conf 指令

🔗 技巧

:warning: 此部分不适用于 SMP Squid。

我在一台机器上管理多个运行的 squid 时发现的最简单的方法是

🔗 使用 iptables 在单个端口后进行负载均衡

作者:Felipe Damasio, Eric Dumazet, Jan Engelhardt

操作理论是:它将新的 HTTP 连接放入 extrachain 链。在那里,它为每个连接标记一个顺序号。此标记稍后由 PREROUTING 链检查,并根据标记转发到 squid 端口。

因此,第一个连接将被发送到端口 3127,第二个到 3128,第三个到 3129,第四个回到 3127(通过端口循环实现均匀分布)。

在 netfilter-devel 上开发的完整讨论串在这里:http://marc.info/?l=netfilter-devel&m=127483388828088&w=2

(请注意换行,iptables 规则是单行)。

N=3
first_squid_port=3127

iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT

iptables -t mangle -N extrachain
iptables -t mangle -A PREROUTING -p tcp --dport 80 -m conntrack --ctstate NEW -j extrachain

for i in `seq 0 $((N-1))`; do
  iptables -t mangle -A extrachain -m statistic --mode nth --every $N --packet $i -j CONNMARK --set-mark $i
done

for i in `seq 0 $((N-1))`; do
  iptables -t mangle  -A PREROUTING -i eth0 -p tcp --dport 80 -m connmark --mark $i -j TPROXY --tproxy-mark 0x1/0x1  --on-port $((i+first_squid_port))
done ```

类别: 知识库

导航: 站点搜索站点页面类别🔼 向上