有時候因為需求需要而要限制特定網址需要登入才能夠使用,但是透過程式層實作可能需要花費不少時間,這篇教如何使用伺服器驗證方式來做驗證功能。
首先需要產生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錯誤