在 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 目录, 便会要求输入使用者名称及密码。