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 的經驗。
- 官方 wiki:關於多個 ACL 的解釋還不夠
- Visolve.com:開源諮詢公司..與 squid 有一些合作
- Squid ACL 和延遲池文章
- Howtoforge 關於延遲池的文章:這已在 serverfault 的另一個問題中提及
- 從它工具箱網站
您可能想檢查範例中列出的“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 當時沒有使用它。