[教學]對網頁啟用密碼驗證 (Nginx)

有時候因為需求需要而要限制特定網址需要登入才能夠使用,但是透過程式層實作可能需要花費不少時間,這篇教如何使用伺服器驗證方式來做驗證功能。

首先需要產生htpasswd檔案供驗證密碼使用 共有兩種產生方式

第一種方法是 不需要安裝任何套件

首先輸入(其中/etc/apache2/.htpasswd為檔案產生位置 username001為使用者名稱)以下指令:

sudo sh -c "echo -n 'username001:' >> /etc/nginx/.htpasswd"

接著輸入以下指令來產生密碼(會提示需要輸入密碼 輸入兩次密碼後 會把檔案產生到指定的位置)

sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

 

第二種方式是 透過htpasswd來產生

首先要安裝apache2-utils才能使用htpasswd

sudo apt-get install apache2-utils

接著輸入以下指令產生htpasswd (其中/etc/apache2/.htpasswd為檔案產生位置 username001為使用者名稱)

sudo htpasswd -c /etc/nginx/.htpasswd username001

接著會提示需要輸入密碼 輸入兩次密碼後 會把檔案產生到指定的位置

假如要新增其他使用者則是輸入以下指令(為前面的指令去掉-c)

sudo htpasswd /etc/nginx/.htpasswd username002

 

如果想知道產生了哪些使用者 可以直接用cat指令顯示

cat /etc/nginx/.htpasswd

以這例子會產生如下的內容

user001:$apr1$kfnPDTkJ$gAFKBA5geX0LeY9l/Egfg/

冒號之前是帳號 而後面為驗證用密碼

此密碼是動態的 即使重新產生一次輸入相同密碼 後面的值也不一定會一樣

 

接著設定nginx設定來設定哪些網頁需要登入才能使用 輸入指令

sudo nano /etc/nginx/sites-enabled/default

接著找到location的block中加入以下兩行 (其中auth_basic後面的文字可以隨意寫 會在提示登入時顯示)

auth_basic "You need to login";auth_basic_user_file /etc/nginx/.htpasswd;

加入後的結果可能會像是 可以修改location後面的值 來只對特定網址進行驗證

location / {

auth_basic "You need to login";

auth_basic_user_file /etc/nginx/.htpasswd;

try_files $uri $uri/ =404;

}

改完輸入以下指令重啟nginx伺服器

sudo service nginx restart

 

這時候輸入特定網址會提示需要登入

假如驗證失敗會顯示401錯誤