學習網頁開發的時候,難免會需要自行架設伺服器在本機上,但一旦為自己的電腦安裝了伺服器之後,只要電腦一連上網,全世界任何人只要使用你在網路上的IP就可以連上你的伺服器。
於是我們想要設定使用者名稱與密碼來保護我們自己的伺服器,以限定能夠瀏覽的使用者。而為了做到這件事,我們會需要兩個檔案:.htpasswd
、與.htaccess
。
為伺服器新增使用者
首先我們需要產生一個存放帳號密碼的.htpasswd
檔案,建議是放在網頁根目錄再上層的其他地方以避免他人從網路上存取。
例如要新增的使用者名稱叫做user
,產生方法如下。
$ sudo htpasswd -c /path/to/.htpasswd user
此時系統會提示你要輸入密碼,Enter 確定後會要再輸入一次,以確保剛剛輸入密碼正確。
如果你想繼續增加一個使用者叫做user2
,可以在終端機再這樣輸入。
$ sudo htpasswd /path/to/.htpasswd user2
你可以為user2
設定另一個完全不同的密碼。
在.htpasswd
檔案裡面,帳號會直接儲存、而密碼會記錄一個用 MD5 算出的雜湊值(看起來就是一個亂碼才不會被發現),所以我們看到剛剛做出來的.htpasswd
檔案裡面寫成這樣:
user:$apr1$dxTa0IZA$B8XPOXcm5geDT17eJ2VYf1
user2:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
分別記錄兩個使用者(user
與user2
)的帳號與密碼雜湊值,之後伺服器就可以用同樣的算法去做密碼驗證。所以其實如果不用終端機的話,也可以到這個網站來產生我們想要的帳號與密碼雜湊值,一個使用者寫一行,或者你也可以自己寫演算法 XD
保護根目錄
接著我們在想保護的資料夾裡面,新增一個.htaccess
檔案寫入以下文字來告訴伺服器:這個目錄需要有權限才能進入,如果該檔案已經存在的話就直接把文字加在裡面。
AuthType Basic
AuthName "My Protected Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
不知道怎麼寫的話,也可以到這個網站把產生的文字存成檔案,直接放在想保護的目錄裡就可以了。
重新整理網頁,搞定……的話就沒問題了,如果仍然不需要密碼可以直接進入的話,繼續往下看。
伺服器設定
在伺服器的設定檔中,找到對應的區塊加入以下設定。端看你要上鎖的網域,這個設定檔可能是在預設的httpd.conf
中或者是設定虛擬伺服器的httpd-vhost.conf
這個檔案。
<Directory "/absolute/path/to/web/root/dir">
AllowOverride All
</Directory>
弄好之後,重新啟動伺服器。
$ sudo apachectl restart
再次進入我們自己的網站,搞定!
補充說明
.htaccess
檔案內我們剛剛新增的內容,其實要寫在伺服器設定檔也是可以的,可以參考這個網誌。
另外,如果想要修改密碼的話,其實就等於再做一次使用者設定,例如我們要修改user2
的密碼。
$ sudo htpasswd /path/to/.htpasswd user2
參考資料