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配置虛擬目錄

虛擬目錄簡介:

虛擬目錄就是將原本不存在於網站根目錄下的目錄對映到一個別名上,這樣Apache就可以透過“http(s)://網址/別名”的形式訪問他啦!

配置方法:

先配置一個簡單的虛擬主機。

[root@localhost ~]# vim /etc/httpd/conf.d/a.conf
<VirtualHost *:80>
       DocumentRoot /tmp/html/
</VirtualHost>

在虛擬主機中定義虛擬目錄。

Alias /dir /tmp/html1

最終的虛擬機器配置檔案的內容是這樣的。

<VirtualHost *:80>
       DocumentRoot /tmp/html/
       Alias /dir /tmp/html1
</VirtualHost>

建立站點目錄及網頁。

[root@localhost ~]# mkdir /tmp/html /tmp/html1
[root@localhost ~]# echo one > /tmp/html/index.html
[root@localhost ~]# echo two > /tmp/html1/index.html

在保證selinux和防火牆均關閉的情況下啟動Apache。

[root@localhost ~]# service httpd start

測試:

可以選擇在Windows的瀏覽器上測試,這裡我為了方便,直接在CentOS下的文字瀏覽器中測試。

安裝瀏覽器。

[root@localhost ~]# yum install -y links

使用瀏覽器開啟站點首頁,這裡的192.168.1.100是我的Apache伺服器的IP地址。

[root@localhost ~]# links 192.168.1.100

按q退出後,重新開啟帶虛擬目錄的站點URL,可以看到,成功輸出了虛擬目錄中的首頁檔案的內容,至此,虛擬目錄配置完成。

[root@localhost ~]# links 192.168.1.100/dir

Apache配置HTTPS訪問

介紹:

HTTPS協議是加密後的HTTP協議,瀏覽器和伺服器間的通訊被加密傳輸,有效的防止了網頁劫持並保護了使用者的資料安全。HTTPS加密會使用到SSL證書,本例中使用OpenSSL這個開源軟體來生成SSL證書做測試用。網站正式上線後需去專門的CA機構申請SSL證書,自己生成的證書是不被瀏覽器信任的。

安裝軟體:

[root@localhost ~]# yum install -y openssl       //安裝OpenSSL軟體包用於生成SSL證書,此軟體包通常已隨系統預設安裝。
[root@localhost ~]# yum install -y httpd         //安裝Apache。
[root@localhost ~]# yum install -y mod_ssl       //安裝Apache的SSL加密模組。

生成證書:

使用OpenSSL在/etc/httpd/ssl目錄下生成一個自簽名證書(儲存位置隨意)。

[root@localhost ~]# mkdir /etc/httpd/ssl       //建立SSL儲存資料夾
[root@localhost ~]# openssl req -newkey rsa:2048 -nodes -keyout /etc/httpd/ssl/ssl.key -x509 -days 365 -out /etc/httpd/ssl/ssl.crt       //生成SSL證書檔案

隨後程式會依次要求輸入所在的國家、地區、城市等等的資訊,因為我們是做測試用的,這裡全部直接回車即可。但是在下圖中紅色箭頭所指的位置上要填上啟用HTTPS的站點的域名,否則客戶端瀏覽器可能會因為簽名域名和站點實際域名不同而斷開連結。

檢視剛剛生成的證書。

[root@localhost ~]# ls /etc/httpd/ssl/

其中,.crt檔案是證書檔案,.key檔案是私鑰檔案。

Apache配置部分:

配置Apache的ssl.com子配置檔案,此配置檔案必須是安裝過mod_ssl模組才會有。

[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf

我看到網上很多教程說,在修改/etc/httpd/conf.d/ssl.conf子配置檔案前還要在/etc/httpd/conf/httpd.conf主配置檔案中引入mod_ssl模組。這裡特殊說明一下,在CentOS 6.5下/etc/httpd/conf.d/ssl.conf子配置檔案中就已經引入了mod_ssl模組,不需要再另外引入,另外,此配置檔案中也預設開啟了對443埠(HTTP使用80埠傳輸,HTTPS使用443埠傳輸)的監聽。

本例中修改成如下圖所示,“*”代表監聽所有IP地址,虛擬主機所使用的域名必須使用DNS伺服器解析到Apache伺服器的IP上。

在105行和112行找到下圖中的選項,將這輛個選項的引數修改為證書檔案及私鑰檔案的儲存位置。

建立網站首頁檔案。

[root@localhost ~]# echo 'hello,world!' > /var/www/html/index.html

如果在啟用HTTPS訪問的同時還要禁止HTTP訪問可以做如下修改。

編輯Apache主配置檔案。

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

方法1:暴力修改法。

轉到第136行左右位置將監聽80埠的選項直接禁用掉,這將會影響主配置檔案中所有的虛擬主機。

修改後如圖。

方法2:將需要禁用HTTP訪問的虛擬主機配置資訊刪掉即可,如下圖就是一個監聽80埠(HTTP使用80埠)的虛擬主機配置資訊。

最後,儲存配置檔案,並在保證防火牆及selinux均已關閉的情況下重啟Apache。

[root@localhost ~]# service httpd restart

測試:

此時,透過HTTP協議已無法訪問網站。

HTTPS協議正常訪問網站,但瀏覽器會提示證書錯誤,因為是自簽證書所以並不會被瀏覽器所信任,此處可不予理會。

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

在客戶機驗證配置,訪問網站域名後彈出認證提示框:

正確輸入賬號名和密碼後成功訪問網站:

httpd伺服器配置

啟動httpd伺服器:service httpd start/restart重啟/stop關閉/
驗證httpd伺服器:
首先關閉防火牆:service iptables stop
然後訪問伺服器ip地址即可看到apache的預設頁面
建立httpd配置檔案:
cd /etc/httpd/conf.d/
新建一個配置檔案:
vim a.conf(檔案字尾必須是conf)
listen 89監聽埠
listen 90
<VirtualHost *:89>指定以任意地址加89埠訪問
DocumentRoot /www/89/設定網站根目錄
</VirtualHost>
<VirtualHost *:90>
DocumentRoot /www/90/
</VirtualHost>
改動httpd配置檔案之後必須重啟服務:
service httpd restart
以上配置檔案是建立了兩個透過埠號來區分的虛擬主機,現在要為兩個虛擬主機新增首頁檔案並建立目錄。
mkdir /www/
mkdir /www/89
mkdir /www/90
在/www/89和/www/90中分別新增一個首頁檔案index.html內容自定義。
最後透過客戶機瀏覽器可以訪問到網站既是配置成功。