從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 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段間使用空格分隔