Squid 延迟池和多个 ACL 评估

Squid 延迟池和多个 ACL 评估

我正在 ubuntu amd64 机器上测试 squid 3.0。当我使用多个 ACL 设置 delay_access 参数时,我遇到了延迟池类问题。我已经浏览过 squid wiki,但没有任何结论。也许有人或 squid 专家可以分享他们在 squid 3.x 中使用延迟池的经验,我认为 2.x 略有不同。我把所有问题都放在一个问题中,因为所有这些都与 squid 中的这个有趣功能有关。

一个简单的例子:

acl workday time MTWHF
acl work_time time 9:00 - 18:00
acl work_day time MTWHF 9:00 - 18:00
acl streaming_site dstdomain youtube.com hulu.com

delay_pools 2

delay_class 1 2
delay_class 2 2

delay_access 1 work_day streaming_site
delay_parameters 1 500000/500000 100000/100000
delay_access 1 deny all

delay_access 2 !work_day
delay_parameters 2 1000000/1000000 500000/500000
delay_access 2 deny all

问题 1:squid 如何评估 delay_access 中的多个 ACL,是使用 OR 规则还是 AND 规则。如果它使用 AND 规则来匹配两个或多个 ACL,我们如何才能使多个 ACL 实现 OR。

问题2:下面的参数是否产生相同的效果?

delay_access 1 work_day streaming_site

或者

delay_access 1 work_day
delay_access 1 streaming_site

问题 3:一旦延迟池未被使用。该池是否会影响总带宽。例如,delay_access 1 规则在下班时间 18:01++ 后已过期。为什么延迟池没有重置为未使用。或者如何将其重置回空?

提前感谢您分享您的经验。


我已经检查、阅读和测试过的参考文献......但仍然有兴趣了解其他人使用多个 ACL 的经验。

  1. 官方维基:关于多个 ACL 的解释仍然不够
  2. Visolve.com:开源咨询公司,与 Squid 有一些合作
  3. Squid ACL 和延迟池文章
  4. Howtoforge 关于延迟池的文章:serverfault 中的另一个问题中提到了这一点
  5. 来自 IT 工具箱网站

答案1

您可能需要检查示例中列出的“delay_pool”指令 - 它不应该是“delay_pools”(带有“s”)吗?我在本地对其进行了测试(嗯,使用 Squid 2.7 而不是 3),结果导致所有 delay_pools 失败。

关于问题 1,ACL 是 OR 的。下面是一个示例,说明我如何使用它来不使用延迟池通过我们的代理访问内部资源:

acl delay_pool_local_1 dst 192.168.0.0/24
acl delay_pool_local_2 dst 192.168.1.0/24
delay_access 1 allow delay_pool_local_1
delay_access 1 allow delay_pool_local_2
delay_access 1 deny all

关于问题 2,您需要将每个 acl 指令放在其自己的行上。

对于问题 3,简单的答案是,根据您的示例,每个客户端可用的带宽“桶”将始终立即重新填充。因此它们永远不会空。

更详细的解释是,“存储桶”将始终以您指定的速率重新填充。客户端将以 delay_initial_bucket_level 的带宽量开始。当客户端下载时,数据将从存储桶中删除。因此,如果您指定 delay_initial_bucket_level 50,则存储桶将从 50% 满开始。在上面的示例中,存储桶始终会立即重新填充(因为它们被指定为“100000/100000”),这意味着客户端被限制为 100000。如果您指定 5000/100000,则存储桶将以 5000 的速率“重新填充”。在这种情况下,即使 ACL 当时没有使用它,存储桶也会以正常速率重新填充。

相关内容