在 Apache 要設定密碼保護目錄, 可以用 .htaccess 及 .htpasswd 實現, 但在 Nginx 不支援 .htaccess..
以下是 Nginx 設定密碼保護目錄的方法。
1. 建立使用者名稱及密碼
首先需要建立一個密碼檔, 裡面包含了使用者名稱, 以及加密了的密碼, 如果系統有安裝 Apache, 可以用以下語法建立密碼檔:
# htpasswd -c /path/to/file/.htpasswd username
然後跟著指示設定密碼即可。
但如果沒有 htpasswd 指令可以使用, 那便要手動建立密碼檔, 但也是很簡單的。密碼檔的格式如下:
username:encrypted-password:comment
上面的 username 是使用者名稱, 可以自行定義, 而 encrypted-password 則是加密的密碼, 以下是用 perl 建立加密密碼的指令:
1 2 |
# perl -le 'print crypt("your-password", "salt-hash")' saoYYKpu2QSsA |
上面設定指令會輸出 “your-password” 的加密密碼, 請按需要自行修改密碼, 然後指令會輸出加密的密碼, 上面的例子是 “saoYYKpu2QSsA”
現在建立密碼檔:
# vi /home/opencli/.htpasswd
將要設定的使用者名稱及上面的加密密碼複製到檔案, 即以下格式:
1 |
username:saoYYKpu2QSsA |
儲存檔案後離開文字編輯器。
現在開啟 Nginx 的設定檔設定, 以下假設檔案在 /etc/nginx/conf.d/default.conf:
# vi /etc/nginx/conf.d/default.conf
假設我要設定密碼保護的目錄是 /usr/share/nginx/html/admin, 在 server 段落加入以下幾行:
1 2 3 4 |
location /admin/ { auth_basic "Restricted"; auth_basic_user_file /home/opencli/.htpasswd; } |
上面的 “/admin/” 表示主機下的 admin 目錄, 預設即 /usr/share/nginx/html/admin, 如果想整個網站也要密碼保護, 改成 “location /” 即可.
儲存檔案後需要重新啟動 Nginx:
# systemctl restart nginx
現在再次進入網站的 /admin 目錄, 便會要求輸入使用者名稱及密碼。