酷!學園
2010-09-03 13:17 *
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?

請輸入帳號, 密碼以及預計登入時間
新聞:
 
   首頁 | Study-Area | 鳥園 | 鳥哥的Linux私房菜   說明 搜尋 日曆 登入 註冊  
頁: [1]
  列印  
作者 主題: 讓 mod_cband 在某些條件下不設限  (閱讀 6063 次)
0 會員 以及 1 訪客 正在閱讀本篇主題.
twu2
酷!學園 學長們
俺是博士!
*****
會員性別: 男
文章: 4828



檢視個人資料 個人網站
« 於: 2006-03-15 16:13 »

話說自從把 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>

<IfModule mod_cband.c>
    CBandSpeed 800 200 200
    CBandRemoteSpeed 500 50 50
    CBandClassRemoteSpeed local_class 1Gbps 1000 1000
    CBandLimit 10G
    CBandExceededSpeed 10 3 3
    CBandPeriod 1W
    CBandScoreboard /var/run/apache2/default.scoreboard
</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>
已記錄

頁: [1]
  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
本頁花了 0.051 秒,以及 15 次的資料庫查詢。