介绍:
默认情况下,任何用户都可以访问由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
在客户机验证配置,访问网站域名后弹出认证提示框:
正确输入账号名和密码后成功访问网站:
你好,我按照您的方法做了。访问失败,找不出原因。我已经关了防火墙和selinux,打开页面时输入用户名和密码,页面不跳转,登陆不成功,
基本的web服务器访问正常吗?页面不跳转有没有错误输出?
没有做访问认证之前,web服务器能正常访问,做了之后就不行了。页面不跳转,也没有什么错误输出,就是一直弹出输入用户名密码的窗口,然后页面都是一片空白。