Squid

Squid 延遲池和多個 ACL 評估

  • July 12, 2010

我正在 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. 官方 wiki:關於多個 ACL 的解釋還不夠
  2. Visolve.com:開源諮詢公司..與 squid 有一些合作
  3. Squid ACL 和延遲池文章
  4. Howtoforge 關於延遲池的文章:這已在 serverfault 的另一個問題中提及
  5. 從它工具箱網站

您可能想檢查範例中列出的“delay_pool”指令——它不應該是“delay_pools”(帶有’s’)嗎?我在本地對其進行了測試(好吧,使用 Squid 2.7 而不是 3),它導致所有 delay_pools 失敗。

關於問題 1,ACL 是 OR’ed。這是一個範例,說明我如何使用它不使用延遲池通過我們的代理訪問內部資源:

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 當時沒有使用它。

引用自:https://serverfault.com/questions/158182