在 Apache 設定密碼保護目錄會使用 .htpasswd 這種檔案,在 Nginx 有提供 auth_basic 模組,設定也很方便,以下是 Nginx 設定密碼保護目錄的方法。
首先建立儲存使用者名稱及加密密碼的檔案 .htpasswd,可以用 htpasswd 指令完成,以下會設定使用者名稱是 username,密碼檔放在 /var/www/domain.com/member/ 目錄下面:
# htpasswd -c /var/www/domain.com/member/.htpasswd username
然後會出現提示,要求設定密碼。
如果系統內沒有安裝 htpasswd,可以手動建立這個檔案,每個使用者一行紀錄。
在手動建立密碼檔前,需要先用 Perl 的 crypt 函式取得加密密碼的字串,執行以下指令:
1 |
# perl -le 'print crypt("your-password", "salt-hash")' |
然後系統會印出加密了的密碼,將這個密碼複製,放入 .htpasswd 檔案:
# vi /var/www/domain.com/member/.htpasswd
加入以下內容:
username:encrypted-password
上面的 encrypted-password 是前面用 Perl 執行的結果。
建立好 .htpasswd 密碼檔案,便要設定 Nginx,將 /var/www/domain.com/member 目錄加入密碼保護:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen 80; server_name domain.com www.domain.com; location / { # your setting here } location /member { auth_basic "Member Login"; auth_basic_user_file /var/www/domain.com/member/.htpasswd; } # 禁止外部存取 .htpasswd 密碼檔 location ~ /\. { deny all; } } |
最後重新啟動 Nginx:
# systemctl restart nginx
或
# service nginx restart
之後當存取 member/ 目錄時,便會彈出輸入使用者名稱及密碼的提示。