Performance
限製網路爬蟲
我的網站正在被 Google webspiders 攻擊。歡迎 Google 為我的網站編制索引,但有時它在我的網站上查詢 tagcloud 的速度比我的網路伺服器生成結果的速度要快,導致我的網路伺服器資源不足。
如何以不影響普通訪問者的方式限制對我的網路伺服器的訪問?
robots.txt 不是選項,因為它會阻止整個站點被索引。
iptables -m recent
很棘手,因為某些頁面有很多圖像或其他數據文件,並且在這些文件上也有“最近”觸發器(通常是我的 RSS 聚合器,載入圖像和提要)。
iptables -m limit
有同樣的缺點,最重要的是,我無法選擇每個 IP 源地址。如何限制導致我的伺服器負載過高的訪問者?
我在 VirtualBox VM 的 Ubuntu 伺服器上執行 apache2。
試試mod_qos Apache 模組。目前版本具有以下控制機制。
- 對位置/資源 (URL) 或虛擬主機的最大並發請求數。
- 頻寬限制,例如每秒對 URL 的最大允許請求數或每秒下載的最大/最小千字節數。
- 限制每秒請求事件的數量(特殊請求條件)。它還可以“檢測”非常重要的人 (VIP),他們可以在沒有限製或限制較少的情況下訪問 Web 伺服器。
- 通用請求行和標題過濾器以拒絕未經授權的操作。
- 請求正文數據限制和過濾(需要 mod_parp)。
- TCP 連接級別的限制,例如,來自單個 IP 源地址的最大允許連接數或動態保持活動控制。
- 當伺服器用完可用的 TCP 連接時,首選已知 IP 地址。
文件中的這個範例條件規則應該讓您朝著正確的方向前進。
# set the conditional variable to spider if detecting a # "slurp" or "googlebot" search engine: BrowserMatch "slurp" QS_Cond=spider BrowserMatch "googlebot" QS_Cond=spider # limits the number of concurrent requests to two applications # (/app/b and /app/c) to 300 but does not allow access by a "spider" # if the number of concurrent requests exceeds the limit of 10: QS_LocRequestLimitMatch "^(/app/b/|/app/c/).*$" 300 QS_CondLocRequestLimitMatch "^(/app/b/|/app/c/).*$" 10 spider