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