apache为我们提供了比较完善的各种模块。而其在访问控制上也比较灵活,通过apahce ,我们可以很方便的对目录的访问做密码认证控制或IP访问策略控制。同时对于反应代理的页面的处理上,其也提供了其应的命令可以进行方便简介的处理。具体如下:

对于目录的访问控制:

 1</VirtualHost>
 2<VirtualHost *:80>
 3    ServerAdmin [email protected]
 4    ServerName test.361way.com
 5    DocumentRoot "/var/www/html/test"
 6    <Directory "/var/www/html/test">
 7        Order deny,allow
 8        Deny from all
 9        Allow from XXX.XXX.XXX.XXX/29
10    </Directory>
11</VirtualHost>

如下面这一个虚拟主机的配置,我们只允许XXX.XXX.XXX.XXX/29 这个IP段的主机进行访问,其他所有的主机进行拒绝,当然,如果想进行访问密码限制,我们还可以通过authtype和authuserfile命令配置密码认证。(密码文件可通过htpasswd生成)

但对于某此反向代理的访问控制,如果再使用directory进行访问控制的话,显然在某些情况下并不适用(如:代理部分在另外一台主机上,这时候再通过目录指向,显然不行)。不过,apache的设计者们显然比我们提前想到了这个问题,其提供的mod_proxy模块里自带了对反向代理处理的命令,如下:

1ProxyPass   /bamboo http://localhost:9090/bamboo
2ProxyPassReverse    /bamboo http://localhost:9090/bamboo
3 <proxy  http://localhost:9090/bamboo >
4            Order Deny,Allow
5            Deny from all
6            Allow from XXX.XXX.XXX.XXX/29
7    </proxy>

同样,对于某域名只允许指定的IP进行访问。

注:上面的要求,我们同样可以通过rewrite正则进行实现,不过即然apache为我们提供了这么方便而且强大的命令,干吗一定要麻烦的去利用正则表示呢?

提到apache,如果不对比下nginx,似乎就有点说不过去。毕竟现在其已是apahce最强劲的对手。nginx在访问控制上的处理同样不容小觑。

1、密码访问设置:

1location ~ ^/(tongji)/ {
2    root /data/www/wwwroot/count;
3    auth_basic "361WAY-COUNT-TongJi";
4    auth_basic_user_file /usr/local/nginx/conf/htpasswd/tongji;
5}

不过,密码文件的生成要用到apache的htpasswd工具。

2、文件类型控制:

1location ~* .(txt|doc)$ {
2    if (-f $request_filename) {
3        root /data/www/wwwroot/361way.com/test;
4        #rewrite …..可以重定向到某个URL
5        break;
6    }
7}

当然,可以简化为下面的语句

1location ~* .(txt|doc)${
2    root /data/www/wwwroot/361way.com/test;
3    deny all;
4}

同样对目录的访问控制也不错:

1location ~ ^/(WEB-INF)/ {
2    deny all;
3}

3、对IP访问的控制,需要用到ngx_http_access_module

1location / {
2    deny 192.168.1.1;
3    allow 192.168.1.0/24;
4    allow 10.1.1.0/16;
5    deny all;
6}