Performance

限製網路爬蟲

  • May 13, 2016

我的網站正在被 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

引用自:https://unix.stackexchange.com/questions/37481