介紹:
默認情況下,任何用户都可以訪問由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服務器能正常訪問,做了之後就不行了。頁面不跳轉,也沒有什麼錯誤輸出,就是一直彈出輸入用户名密碼的窗口,然後頁面都是一片空白。