找了一下在 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 的限制如下:
- 每個 IP 的速度是 500bps
- local_class 裡的機器連線是 1Gbps
- 整個 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>
想請問一下在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還是...請提供一下你的設定,謝謝
那是一個檔案. 可以自己用 CBandScoreboard 指定一個檔案.
你執行 apache 的使用者必須有可以寫入該目錄或檔案的權限.
沒注意到要使用者必須有可以寫入該目錄或檔案的權限.
改過權限後就不會在出現error了.謝謝