在 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/ 目录时,便会弹出输入使用者名称及密码的提示。