Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

讓 mod_cband 在某些條件下不設限
post by tommy @ 15 三月, 2006 15:40
話說自從把 apache 由 1.3 換成 2.0 之後, 原本我使用的 mod_throttlemod_bandwidth 就不能使用了. 不久前, 發現有些使用者放了一個大的檔案上來, 結果.... 把我小小的 1M 上傳頻寬都給吃光了, 所以完全沒有限制, 對我使用的 ADSL 來說, 實在不是件好事.

找了一下在 Apache2 中的相關模組, 發現有個 mod_cband 似乎可以用來取代上述兩個在 1.3 時所用的模組. 設定並不會很複雜, 下載後就裝起來用了. 運作也十分正常.

不過上星期回家時, 老婆抱怨由網站看我們拍的影像檔時, 速度很慢. 我試了一下, 果然... 這個 mod_cband 連我們 local 網路也限速了.

我原本的設定是:

<IfModule mod_cband.c>
<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>

<CBandClass local_class>
CBandClassDst 127/8
CBandClassDst 192.168.0.0/24
</CBandClass>
</IfModule>  

以為這樣的設定, 可以讓這個 virtualhost 的限制如下:

  1. 每個 IP 的速度是 500bps
  2. local_class 裡的機器連線是 1Gbps
  3. 整個 virtualhost 的限制是 800bps.

不過, 實際上, mod_cband 仍會因為超過整個 virtualhost 的 800bps 限制, 而讓 local_class 的設定失效. 為了避免這個問題, 我必須把 CBandSpeed 也改成 1Gbps, 不過, 這樣子雖然可以讓我在 local_class 的機器下載速度達到 1Gbps, 不過, 也表示整個 virtualhost 的限制也變成 1Gbps, 如果同時有數個 ip 連線來抓資料, 每個 ip 的限制雖然是 500bps, 加起來, 仍會用掉我所有的上傳頻寬.

所以, 就改了一下 mod_cband.c 的內容:

--- mod_cband.c.orig    2006-03-15 15:00:31.870512882 +0800
+++ mod_cband.c 2006-03-15 15:30:53.494343139 +0800
@@ -3438,6 +3438,8 @@
not_limit = 0;
if ((mod_cband_get_shared_speed_lock(entry, entry_user) < 0) && (max_remote_kbps == 0))
not_limit = 1;
+ // if max_remote_kbps > 9xxGbps (set to 1000Gbps), we assume it is no any speed limit.
+ if (max_remote_kbps > 1000000000) not_limit = 1;

mod_cband_change_total_connections_lock(entry, entry_user, 1);
mod_cband_change_remote_connections_lock(remote_idx, 1);
 

這個 patch 也可以由這兒抓取: http://www.teatime.com.tw/~tommy/mypatch/mod_cband_nolimit.patch

經過這樣的修正,  只要我把限制設定為 1000Gbps 或更大的數字時, 就表示不要有任何的限制. 所以我可以用下面的設定來達到我要的功能了:

<IfModule mod_cband.c>
<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>

<CBandClass local_class>
CBandClassDst 127/8
CBandClassDst 192.168.0.0/24
</CBandClass>
</IfModule>
<IfModule mod_cband.c>
CBandSpeed 800 200 200
CBandRemoteSpeed 500 50 50
CBandClassRemoteSpeed local_class 1000Gbps 1000 1000
CBandLimit 10G
CBandExceededSpeed 10 3 3
CBandPeriod 1W
CBandScoreboard /var/run/apache2/default.scoreboard
</IfModule>

 

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] 關於mod_cband中CBandScoreboard的設定? [ 回覆 ]

想請問一下在apache2的error.log中出現
apache2_mod_cband: cannot open scoreboard file /var/run/apache2/default.scoreboard
這要如何才能讓error消失...default.scoreboard不是一個目錄嗎?且/var/run/apache2/default.scoreboard的使用者是www-data還是...請提供一下你的設定,謝謝

commons icon [2] [ 回覆 ]

那是一個檔案. 可以自己用 CBandScoreboard 指定一個檔案.
你執行 apache 的使用者必須有可以寫入該目錄或檔案的權限.

commons icon [3] [ 回覆 ]

沒注意到要使用者必須有可以寫入該目錄或檔案的權限.
改過權限後就不會在出現error了.謝謝

迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 133 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS