[Nginx] 把測試網頁上鎖,Basic Authentication 機制

今天同事來問,能不能把一個靜態活動頁面同時又已經掛上網域的站補上密碼,暫時限制瀏覽?

第一直覺就是掛上 Basic Authentication HTTP基本認證

平時不會記詳細操作方法,上網想找篇來套。但發現網路上的教學千篇一大抄,都在說使用 htpasswd 這工具來產生帳號密碼的紀錄檔案。

問題是... 我今天用 Nginx,預設系統就不會安裝httpd-tools [RHEL/CentOS]apache2-utils [Debian/Ubuntu] 的 Apache 相關工具啊? 為了要使用這基本認證要裝這套件還真的殺雞用牛刀!

所以首先找個簡單的替代工具: htpasswd-ssl.sh

#!/bin/sh

# Writes an APR1-format password hash to the provided <htpasswd-file> for a provided <username>
# This is useful where an alternative web server (e.g. nginx) supports APR1 but no `htpasswd` is installed.
# The APR1 format provides signifcantly stronger password validation, and is described here: 
#    http://httpd.apache.org/docs/current/misc/password_encryptions.html

help (){
cat <<EOF
  Usage: $0 <htpasswd-file> <username>
  Prompts for password (twice) via openssl.
EOF
}

[ $# -lt 2 ] && help;
[ $# -eq 2 ] && printf "${2}:`openssl passwd -apr1`\n" >> ${1}

把上面程式碼片段存檔為「htpasswd-ssl.sh」後,賦予執行權限: chmod +x htpasswd-ssl.sh

之後執行指令為:

./htpasswd-ssl.sh /path/to/passwdfile USERNAME

第一個參數是存放密碼路徑,記下來,之後會填寫在 Nginx 裡使用,其次是登入的「帳號名稱」。Enter 確認後提示輸入兩次一樣的密碼完成產生密碼檔案!

Nginx 裡設定很簡單,在 server 的區塊中可以直接使用:

auth_basic  "提示文字";
auth_basic_user_file    密碼檔案路徑; 

如果要限制某個請求就是補在 location 的區塊裡。

完成設定記得 nginx -t 確認沒問題,然後 reload 設定就完成囉!

後記

寫完後發現 WordPress tag 那邊提示過之前有用過相關 tag,一找發現還真有寫過: 使用 Nginx 實現 HTTP Basic authentication (BA) 基本認證

2016 年這篇文末也是一樣賭爛網路上其他人教學是要安裝 Apache 工具XD

果然是我(廢話)

不管,這篇還是要發! 算是紀錄一個新解法了。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *