日期:2014-05-17  浏览次数:20710 次

Apache2使用 .htaccess控制访问权限
这里涉及的配置方式主要是使用 .htaccess 文件, 要使用.htaccess文件,则必须设置服务器以允许在这些文件中使用认证指令,即用AllowOverride指令指定哪些指令在针对单个目录的配置文件中有效。首先将对应的AllowOverride这样设置:

    AllowOverride All

首先,应该创建一个用于认证的密码文件,并且这个文件不应该置于DocumentRoot目录下,以避免被下载。例如可以创建/etc/apache2/passwd/目录,并将密码文件置于其下。

Apache2 为我们提供了/usr/bin/htpasswd命令用于创建密码文件,命令的具体操作方法请参阅htpasswd的手册页:http://httpd.apache.org/docs/1.3/programs/htpasswd.html 这里仅做简单的应用。

首次添加用户需要使用 ?c 参数,以创建密码文件,再次添加用户则不要 -c参数了:

    # mkdir /etc/apache2/passwd
    # htpasswd -c /etc/apache2/passwd/passwords  tony
    New password: [mypassword]
    Re-type new password: [mypassword]
    Adding password for user tony

    # htpasswd /etc/apache2/passwd/passwords  etony
    New password: [mypassword]
    Re-type new password: [mypassword]
    Adding password for user etony

必要时,使用htpasswd 命令需要加入完整路径/usr/bin/htpasswd

修改对应.htaccess文件,加入如下内容:

    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /etc/apache2/passwd/passwords
    Require user tony

让我们逐个解释这些指令。

AuthType指令选择对用户实施认证的方法,最常用的是由mod_auth_basic提供的Basic 。AuthName指令设置了使用认证的域(Realm),它起两个作用,首先,此域会出现在显示给用户的密码提问对话框中,其次,也帮助客户端程序确定应该发送哪个密码。

AuthUserFile指令设置了密码文件的位置,也就是刚才我们用htpasswd建立的文件。

最后,Require指令设置了允许访问受保护区域的用户。

上述指令只允许一个人(一个叫tony的用户)访问这个目录,但是多数情况下。都需要允许多人访问,这时可以调整Require选项为:

    Require valid-user

可以允许密码文件中的所有用户使用正确的密码进行访问。

可能存在的问题

由于采用了Basic认证的方法,每次向服务器请求甚至刷新一个受保护的页面或图片时都必须校验用户名和密码,为此,必须打开密码文件并逐行搜索用户名,因此,服务器响应速度会受一些影响,受影响的程度与密码文件的大小成正比。

所以,对密码文件中的用户总数存在一个实际上的上限,此上限取决于特定的服务器机器的性能,但是一般有几百个用户就会对响应速度有非常明显的影响,在这种情况下,可以考虑用其他认证方法。

Reference Link:
http://www.itlearner.com/code/debian-apache2/debian-apache2-10.html