星期六, 8月 05, 2006

[Apache] How to limit the bandwidth on windows?

看了 bojack 的 Apache 限制流量 How To
也想來試試看 Windows 上能否做到
花費一兩天的時間明查暗訪下,終於給我找到啦~
找到後來才知道有個 http://modules.apache.org 網站
在裡面找到一個 Bandwidth Module 的 module


Installing step:
1. 將 mod_bw.dll 放到安裝 apache 資料夾下的 modules
2. 編輯 httpd.conf,將 LoadModule bw_module modules/mod_bw.dll 加入
3. 重開 apache
4. 查看 phpinfo() 裡是否有 mod_bw



Configuration Directives:
1 - BandWidthModule [On|Off]
這個 module 預設是關閉的,要將他開啟才能夠使用。

Example:
BandWidthModule On
2 - ForceBandWidthModule [On|Off]
這個 module 預設不會過濾每個需求。
如果您開啟他,他將處理過濾每個需求。

Example :
(正常的使用下,僅會過濾 text/html test/plain)
AddOutputFilterByType MOD_BW text/html text/plain

(開啟的狀況下)
ForceBandWidthModule On

3 - BandWidth [From] [bytes/s]
這邊有兩個參數。
From 是限制來源的位置,也就是該位置受限制。他可以是完整的 hostname、網域名稱或 IP。可搭配遮罩使用,例如 192.168.0.0/24 or 192.168.0.0/255.255.255.0 。
另一個參數是限制的速率,以 bytes 每秒為單位;假如為 0,則不受限制。

Example :
BandWidth localhost 10240
BandWidth 192.168.218.5 0

( 依照設定的先後順序為排序準則。Order is relevant. First entries have precedence )

4 - MinBandWidth [From] [bytes/s]
這邊有兩個參數。
From 是限制來源的位置,也就是該位置受限制。他可以是完整的 hostname、網域名稱或 IP。可搭配遮罩使用,例如 192.168.0.0/24 or 192.168.0.0/255.255.255.0 。
另一個參數每個連線限制的最小速率,以 bytes/s 為單位,-1 代表無限制。

Examples :
BandWidth all 102400
MinBandWidth all 50000

The example above, will have a top speed of 100kb for the 1? client. If more clients come, it will be splitted accordingly but
everyone will have at least 50kb (even if you have 50 clients)

BandWidth all 50000
MinBandWidth all -1

上面的例子說明每個連線有 50kb 的速度(不限制最小速度)

5 - LargeFileLimit [Type] [Minimum Size] [bytes/s]
顧名思義,這設定是專門用來限制大型檔案的。
Type 是指副檔名,可以使用 * 代表全部。也可使用 .tgz 、 .avi 等。
Minimun Size 單位是 kbytes/s,只要超過這個 Size 就被規範在這個設定的限速中。
最後一個參數就是被限制的速率囉!

Example :
LargeFileLimit .avi 500 10240

This limits .avi files over (or equal to) 500kb to 10kbytes/s

6 - BandWidthPacket [Size]
可能您不需要去設定這個參數!
預設值為 8192,適用於任何速度。
這個設定必須介於 1024 至 131072。
小的封包將使得速度變慢,且更耗費系統效能;相反亦是。

7 - BandWidthError [Error]
這個選項是用來自訂個人化錯誤訊息的。
在預設的情況下,超過最大連線時,這個 module 將會丟出 503 HTTP_SERVICE_UNAVAILABLE 回應。
對於大部分的人來說,他們會困擾著錯誤訊息,不知道為什麼會這樣。
你可以自訂一個錯誤訊息的頁面,去解釋在什麼情況下會發生這種問題。
但有時候錯誤號碼 503 是不適用這個地方的。
所以你可以自訂一個錯誤號碼從 300 至 599。
( 有關 HTTP 錯誤訊息可參考下列 Reference: HTTP Protocol Error Codes)
在自訂錯誤編碼時請注意,要使用尚未被定義的號碼!

測試的時候,我們使用錯誤號碼 510(510尚未被定義)

And Example, with Personalized Error Page :

ErrorDocument 510 /errors/maxconexceeded.html
BandWidthError 510
注意:有時候自訂錯誤編碼可能會有問題。但在大部分的情況下,作者已修復。

8 - MaxConnection [From] [Max]
這個設定有兩個參數。
From 是限制來源的位置,也就是該位置受限制。他可以是完整的 hostname、網域名稱或 IP。可搭配遮罩使用,例如 192.168.0.0/24 or 192.168.0.0/255.255.255.0 。
第二個參數是設定最大的連線數量。假如連線超過這個數量,Apache 將丟出 503 Service Temporarily Unavailable 的訊息。

在設定這個參數之前,需先指定 BandWidth 值。
他不需要設定的太低,您可以設定為無限制。

Example :
BandWidth all 0
MaxConnection all 20
or
BandWidth all 0
BandWidth 192.168.0.0/24 10240
MaxConnection all 20
MaxConnection 192.168.0.0/24 5


示範區:
這個 module 設定可安插在 virtual host 或 directory,看你要設定在 httpd.conf 或 .htaccess 皆可!
不過使用 .htaccess 別忘了把 httpd.conf 裡的 下的 AllowOverride 設為 ALL
1. 限制每個連線為 10kb/s
BandwidthModule On
ForceBandWidthModule On
Bandwidth all 10240
MinBandwidth all -1
Servername www.example.com
2. 限制每一個連線為 100 kb/s,最小的速率為 50kb/s,且當檔案超過 500 kb 即限速為 50kb/s
BandwidthModule On
ForceBandWidthModule On
Bandwidth all 1024000
MinBandwidth all 50000
LargeFileLimit * 500 50000
Servername www.example.com
3. 限制副檔名為 avi & mpeg 的檔案為 20 kb/s
BandwidthModule On
ForceBandWidthModule On
LargeFileLimit .avi 1 20000
LargeFileLimit .mpg 1 20000
Servername www.example.com
4. 當檔案(mime)為 text 格式,限制速度為 5kb/s
BandwidthModule On
AddOutputFilterByType MOD_BW text/html text/plain
Bandwidth all 5000
Servername www.example.com

使用心得:
安裝及設定的方法很簡單。這是我在本機上測的,限制速度為 30720 bytes/s。



mod_bw v0.7 原文說明(含安裝步驟及使用說明)


Environment:
Windows XP Professional sp2
Apache 2.2.3 (official) + mod_bw v0.7 - Windows Release for Apache 2.2.2
PHP 5.2.0RC2-dev

Reference:
http://www.ivn.cl/apache/
http://blog.bojack.idv.tw/?p=259#comment-454
Http Protocol Error Codes [1], [2], [3]


3 則留言:

匿名 提到...

只要有心,人人都可以是食神丫 !!

J.H 提到...

請問一下,那些參數要去哪裡設定呢?還是要直接輸入在httpd.conf裡面?謝謝~

Unknown 提到...

要如何不限制上傳的速度呢?

 
↗ online | Total: