1. 程式人生 > >Apache2.4使用require指令進行訪問控制–允許或限制IP訪問/通過User-Agent禁止不友好網絡爬蟲

Apache2.4使用require指令進行訪問控制–允許或限制IP訪問/通過User-Agent禁止不友好網絡爬蟲

被拒絕 pid apach res 禁止 阻止 加載 -s case

從Apache2.2升級到Apache2.4後,發現原來用來限制部分IP和垃圾網絡爬蟲的訪問控制規則不起作用,查詢後才發現,Apache2.4中開始使用mod_authz_host這個新的模塊來進行訪問控制和其他的授權檢查。原來在Apache2.2版本下用以實現網站訪問控制的Order,Allow,Deny指令需要替換為新的Require訪問控制指令。

註意:使用require指令時,需要在指令外添加<RequireAll></RequireAll>標簽對,否則重啟Apache2.4加載規則時將出現錯誤:” negative Require directive has no effect in <RequireAny> directive “。

下面直接給出一些實例對Require指令的使用進行說明:

例1:允許所有訪問請求

Apache2.4下的配置:

技術分享
<Directory xxx/www/yoursite>
 
    <RequireAll>
        Require all granted
    </RequireAll>
 
</Directory>
技術分享

例2:拒絕所有訪問請求

Apache2.4下的配置:

技術分享
<Directory xxx/www/yoursite>
 
    <RequireAll>
        Require all denied
    </RequireAll>
 
</Directory>
技術分享

例3:只允許來自特定域名主機的訪問請求,其他請求將被拒絕

Apache2.4下的配置:

技術分享
<Directory xxx/www/yoursite>
 
    <RequireAll>
        Require host google.com
    </RequireAll>
 
</Directory>
技術分享

例4:只允許來自特定IP或IP段的訪問請求,其他請求將被拒絕

Apache2.4下的配置:

技術分享
<Directory xxx/www/yoursite>
 
    <RequireAll>
        Require ip 192.120 192.168.100 192.168.1.1
    </RequireAll>
 
</Directory>
技術分享

例5:允許所有訪問請求,但拒絕來自特定IP或IP段的訪問請求(阻止惡意IP或惡意爬蟲網段的訪問)

Apache2.4下的配置:

技術分享
<Directory xxx/www/yoursite>
 
    <RequireAll>
        Require all granted
        Require not ip 192.168.1.1
        Require not ip 192.120 192.168.100
    </RequireAll>
 
</Directory>
技術分享

例6:允許所有訪問請求,但拒絕某些User-Agent的訪問請求(通過User-Agent屏蔽垃圾網絡爬蟲)

使用mod_setenvif通過正則表達式匹配來訪請求的User-Agent,並設置內部環境變量BADBOT,最後拒絕BADBOT的訪問請求。

Apache2.4下的配置:

技術分享
<Directory xxx/www/yoursite>
 
    SetEnvIfNoCase User-Agent ".*(FeedDemon|JikeSpider|AskTbFXTV|CrawlDaddy|Feedly|Swiftbot|ZmEu|oBot).*" BADBOT
    SetEnvIfNoCase User-Agent "brandwatch" BADBOT
    SetEnvIfNoCase User-Agent "rogerbot" BADBOT
    <RequireAll>
        Require all granted
        Require not env BADBOT
        Require not ip 192.168.100.1
    </RequireAll>
 
</Directory>
技術分享

其它require訪問控制指令用法如下: 技術分享
Require all granted #允許所有
Require all denied #拒絕所有
Require env env-var [env-var] ... #允許匹配環境變量中任意一個
Require method http-method [http-method] ... #允許特定的HTTP方法(GET/POST/HEAD/OPTIONS)
Require expr expression #允許,表達式為true
Require user userid [ userid ] ... #允許特定用戶
Require group group-name [group-name] ... #允許特定用戶組
Require valid-user # #允許,有效用戶
Require ip 192.100 192.168.100 192.168.100.5 #允許特定IP或IP段,多個IP或IP段間使用空格分隔

Apache2.4使用require指令進行訪問控制–允許或限制IP訪問/通過User-Agent禁止不友好網絡爬蟲