Apache2.4使用require指令進行訪問控制
阿新 • • 發佈:2018-06-08
被拒 分享 cas all 圖片 則表達式 apache2.4 span 方法
從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指令進行訪問控制