本篇文章更新時間:2020/06/09
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
今天同事來問,能不能把一個靜態活動頁面同時又已經掛上網域的站補上密碼,暫時限制瀏覽?
第一直覺就是掛上 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 for a provided
# 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 <
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
果然是我(廢話)
不管,這篇還是要發! 算是紀錄一個新解法了。