Apache配置对站点目录的认证

前言:

有的时候需要对站点中的某个目录进行保护,只有输入指定的账号密码才可以浏览。这当然可以通过动态网站设计语言来实现,但通过对Apache本身的配置来实现似乎要更方便一些。

配置方法:

一、Apache配置编辑及站点创建

创建一个站点配置文件。

[root@localhost auth]# vim /etc/httpd/conf.d/vhost1.conf

内容如下:

<Directory "/tmp/html/auth/">      // 要启用认证的目录
    AuthName "请认证身份"           // 服务器返回的认证对话框的标题
    AuthType Basic                 // 认证类型
    AuthUserFile /tmp/html/auth/.htpasswd      // 密码配置文件路径
    require valid-user             // 允许通过认证的所有用户访问,如果改为某一用户名则只允许此用户访问
</Directory>
<VirtualHost *:80>                 // 创建一个简单的虚拟主机用于测试
    DocumentRoot /tmp/html/
</VirtualHost>

创建站点运行目录及要开启认证的站点子目录。

[root@hostname ~]# mkdir -p /tmp/html{,/auth}

查看此时的站点目录结构。

[root@hostname ~]# tree /tmp/html/
/tmp/html/
└── auth

在站点子目录下创建首页文件。

[root@hostname ~]# echo 'Hello,world!' > /tmp/html/auth/index.html

二、生成用户密码配置文件

创建新文件,并向其中添加一个用户认证信息。

[root@hostname ~]# htpasswd -cb /tmp/html/auth/.htpasswd user1 123456     //-c参数用于创建新文件,若文件已存在则无需使用-c参数,-b参数用于指定在命令行中直接键入密码,而不是用交互模式。user1为用户名,123456为密码。
Adding password for user user1   //提示成功添加了user1的用户密码

增加一个新的认证用户。

[root@hostname ~]# htpasswd -b /tmp/html/auth/.htpasswd user2 123456
Adding password for user user2   //成功添加

修改用户的密码。

[root@hostname ~]# htpasswd -mb /tmp/html/auth/.htpasswd user1 654321
Updating password for user user1 //密码更新成功

删除认证用户。

[root@hostname ~]# htpasswd -D /tmp/html/auth/.htpasswd user2
Deleting password for user user1 //删除成功

测试:

使用浏览器访问http://URL/auth(URL是你网站的域名或IP)就会看到要求认证的对话框啦!

这里我为了方便,使用的是Linux下的Links浏览器进行测试的。

正确输入账号密码后,即可看到网页内容。

Apache配合MySQL做访问认证

介绍:
默认情况下,任何用户都可以访问由Apache所承载的网站,但如果网站管理员想要只有通过身份认证的用户才能访问网站要怎样做呢?
当然,这个需求可以使用动态网页设计语言来实现,但本篇文章中我来介绍下如何使用Apache内置的身份认证来满足此需求。
安装软件包:

# yum install -y mysql-server         //安装MySQL数据库,用于存放用户身份信息
# yum install -y httpd                //安装Apache
# yum install -y mod_auth_mysql       //为Apache安装mod_auth_mysql模块,使其可以使用MySQL中存放的用户信息做认证

MySQL配置部分:
启动mysql服务器。

# service mysqld start

修改默认root密码(此root用户是MySQL的管理员账户,而非Linux系统的root用户)。

# mysqladmin -u root -p password 123456

之后会弹出提示,要求输入原root密码,安装MySQL后默认为空,直接回车即可。
若是MySQL5.6及以上版本,默认root密码不为空而是一个随机字符串,存放在~/.mysql_secret文件中。
使用root用户登录MySQL服务器,回车后会要求键入root密码。

# mysql -u root -p

随后转到MySQL的命令提示符下,如下图。

创建一个数据库:auth_db。

mysql>create database auth_db;

选中数据库。

mysql>use auth_db;

在其中新建一个数据表:user,其表结构如下图。

mysql>create table user(ID int,Name varchar(10),Birthday datetime,Sex char(8),Password char(64),primary key(ID));

查看刚刚添加的数据表的表结构。

mysql>desc user;


向表中添加两位用户的数据,要求如下。

 
两位用户的口令与用户名相同。

mysql>insert into user values(0,'myuser1','1996-7-1','male','myuser1');
mysql>insert into user values(1,'myuser2','1997-9-1','female','myuser2');

查看刚刚添加的数据。

mysql>select * from user;


加密密码字段。

mysql>update user set password=encrypt(password);

查看加密后的密码字段。

至此,MySQL配置部分完成。
Apache配置部分:
编辑Apache主配置文件,添加一个虚拟主机。

# vim /etc/httpd/conf/httpd.conf

转到最后一行,可以看到如下内容,取消其前方的注释,并删除多余行(是否删除看具体需求,此处为了演示方便,除了必要选项之外全部删除),同时对选项的参数进行适当修改。

处理完后,如下。

上图中,DocumentRoot选项配置网站主目录,ServerName选项配置网站域名。注:此处的域名需使用DNS服务器解析到Apache服务器的IP上,否则无法使用域名访问。
创建网站首页文件。

# echo 'hello,world!' > /var/www/html/index.html

编辑Apache的auth_mysql.conf子配置文件,此配置文件必须是安装过mod_auth_mysql模块才会有。

# vim /etc/httpd/conf.d/auth_mysql.conf

转到第26行左右位置,可以看到如下内容,去掉其前方注释,并按实际情况修改各选项的参数。

本例中,修改后如下图。

保存并退出后,在保证防火墙和selinux均关闭的情况下重启Apache服务,使配置文件生效。

# service httpd restart

在客户机验证配置,访问网站域名后弹出认证提示框:

正确输入账号名和密码后成功访问网站: