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 /var/www/html>
    <RequireAll>
        Require all granted
    </RequireAll>
</Directory> 

说明:

Apache 2.4.x 中的 Require all granted 相当于 Apache 2.2.x 中的

        Order allow,deny
        Deny from all

Apache 2.4.x 中的 Require all denied 相当于 Apache 2.2.x 中的

        Order allow,deny
        Allow from all

 

例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段间使用空格分隔

 

 

参考推荐

Apache 设置禁止访问网站目录

Apache 封禁IP及IP段访问

httpd使用ssl模块配置HTTPS

实用 .htaccess 用法大全

.htaccess绑定域名到子目录

Nginx使用ssl模块配置HTTPS

Nginx Redirect重定向所有子域名到www

Apache 实现https+Apache http访问转到https

WordPress:.htaccess缓存提高网站性能

Apache 服务器负载低访问慢的原因分析和优化方案