需求:在 FreeBSD 6.1 + Apache 2.0.59 上構建下載伺服器,實現**全域頻寬限制 (50 KB/s)**、**下載目錄單 IP 單連接 (防多執行緒下載工具)**、**目錄瀏覽/靜態檔案服務**。本文記錄完整編譯安裝、模組載入、配置參數、啟動腳本全流程。
cd /root/src
tar zxvf httpd-2.0.59.tar.gz
cd httpd-2.0.59
./configure --prefix=/usr/local/apache --enable-so
# --enable-so: 啟用 DSO 動態模組支援,apxs 載入 .so 模組必備
make && make install
/usr/local/apache/bin/apxs -i -c -a /root/src/mod_bw/mod_bw.c
/usr/local/apache/bin/apxs -i -c -a /root/src/mod_limitipconn/mod_limitipconn.c
# 驗證 httpd.conf 自動新增:
# LoadModule bw_module modules/mod_bw.so
# LoadModule limitipconn_module modules/mod_limitipconn.so
# 1. 全域限速: 所有請求限制 50 KB/s (50000 Bytes/s)
BandWidthModule On
ForceBandWidthModule On
BandWidth all 50000
# 2. 啟用擴展狀態 (mod_limitipconn 需要)
ExtendedStatus On
# 3. 下載目錄單 IP 單連接
<Location /down>
MaxConnPerIP 1
</Location>
# 4. DocumentRoot 與預設目錄權限
DocumentRoot "/usr/local/apache/htdocs"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory "/usr/local/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# 5. 下載目錄實體路徑映射
Alias /down "/usr/local/apache/htdocs/down"
<Directory "/usr/local/apache/htdocs/down">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
| 指令 | 作用 | 注意事項 |
|---|---|---|
| BandWidth all 50000 | 所有連接 (含 HTML/CSS/JS/圖片/下載) 統一限速 50 KB/s | 若僅限下載檔案,需搭配 ` |
| ForceBandWidthModule On | 強制對所有回應啟用限速,含錯誤頁面/重導向 | 關閉則僅限速成功回應 (2xx) |
| MaxConnPerIP 1 | 同一 IP 同一時間僅允許 1 條連接進入 `/down` | 有效封殺 Thunder/IDM/FDM 等多執行緒下載工具;正常瀏覽單執行緒不受影響 |
| ExtendedStatus On | 啟用 Apache 狀態頁面,mod_limitipconn 依賴其計數器 | 亦可供 `mod_status` 監控 |
| Alias /down | 將 URL 路徑 `/down` 映射至實體目錄 | 實體目錄需存在且權限正確 |