您在這裡

Apache中設置屏蔽IP地址和URL網址來禁止采集

James Qi 在 2012年11月23日 - 11:31 發表

  隻要是建有數據量比較多的網站,幾乎不可避免采集的情況,這方面我們已經有多年的對付經驗,主要是通過分析Web訪問日志,找到采集的規律,相應來設置屏蔽IP地址或者URL網址來解決。

  國内的Linux服務器上我們都安裝了Squid作為Apache的前端緩存,所以我們遇到采集的情況就分析Squid的日志,在squid.conf文件中進行設置屏蔽,然後重啟Squid服務就可以。

  近期租用的國外Linux服務器上默認是沒有Squid的,我們也就隻用了Apache作為Web服務器,修改了httpd.conf來讓Apache的日志文件顯示更詳細的虛拟主機域名、User-Agent等信息,以便遇到采集的情況可以分析。

  前一陣子遇到來自固定某個或者某段IP的采集,我們就修改httpd.conf文件,在影響的主機設置中添加這樣的代碼:

Order Deny,Allow
Deny from 125.115.2.85
Deny from 91.228.196.234

  然後重啟Apache服務就可以。

  這兩天遇到比較狡猾的采集,平均每10秒采集一次,IP地址分散到10多個,日志中的User-Agent也是各種都有,這樣僅僅靠屏蔽IP還無法解決,但通過分析發現采集是順着某種頁面的很多分頁順序進行的,例如:http://www.example.com/path/file?page=12345 ,這個12345在不斷增加中,因此隻要屏蔽對http://www.example.com/path/file 這類URL的訪問,就可以全部屏蔽這些采集。

  設置可修改httpd.conf,也可以修改具體目錄下的.htaccess文件,添加rewrite規則如下:

RewriteCond %{HTTP_HOST}  ^can\.bizdirlib\.com(.*)$
RewriteCond %{REQUEST_URI} ^\/business_directory\/S\_\%26\_J(.*)$
RewriteRule .* - [F,L]

  這樣就屏蔽了can.bizdirlib.com站點下/business_directory/S_%26_J 這一類URL。

 

回應

除了屏蔽IP和被訪問網址以外,還可以設置屏蔽User-Agent,在.htaccess中設置的例子如下:

RewriteCond %{HTTP_HOST}  ^aus\.bizdirlib\.com(.*)$
RewriteCond %{HTTP_USER_AGENT} ^(.*)(Creative\sAutoUpdate|HTTrack)(.*)$
RewriteRule .* - [F,L]

另外,還可以把httpd.conf中屏蔽IP的辦法也改為在.htaccess中設置,例如:

RewriteCond %{HTTP_HOST}  ^aus\.bizdirlib\.com(.*)$
RewriteCond %{REMOTE_ADDR} ^(202\.70\.136\.158|161\.183\.172\.141)$
RewriteRule .* - [F,L]

 

James Qi / 祁勁松

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。