利用 htpasswd|openssl 为 Nginx 添加登录验证生成密码

利用 htpasswd|openssl 为 Nginx 添加登录验证生成密码

Apache/Nginx 自带401密码验证,相较于开发一套登录系统,更为简单方便,下面来说说如何生成密码以及如何启用。

htpasswd和openssl安装

htpasswd

安装软件

# yum install httpd-tools -y               #适用 centos
$ sudo apt-get install apache2-utils -y #适用 ubuntu

生成/修改/删除密码

$ htpasswd -c /var/www/html/.htpasswd user1  #回车会要求输入两遍密码,会清除已有的所有用户
$ htpasswd -bc /var/www/html/.htpasswd user1 password #不用回车,直接指定 user1 的密码 为password
$ htpasswd -b /var/www/html/.htpasswd user2 password #添加一个用户,如果用户已存在,则是修改密码
$ htpasswd -D /var/www/html/.htpasswd user2 #删除用户

/var/www/html/.htpasswd 是验证用户密码存储的文件位置

openssl

安装软件

一般系统默认自带,如果是最小化安装,可以执行下列命令安装

#  yum install openssl openssl-devel -y      #适用 centos
# apt install openssl openssl-devel -y #适用 ubuntu

生成密码

# printf "your_username:$(openssl passwd -crypt your_password)\n" >>  /var/www/html/.htpasswd

启用 401 密码验证

Apache/Nginx 默认已编译密码验证模块,如 Nginx 是 ngx_http_auth_basic_module,如果没有开启
以重新编译加上开启参数即可。

Apache

在配置文件中将需要保护的路径 添加 并开启 basic 认证:

<Directory /data/webroot/mail_admin >
......
        AuthType Basic
        AuthName "Authority Required" # 验证时的提示信息,但并非所有终端都支持显示
        AuthUserFile /var/www/html/.htpasswd
        Require user admin
......
</Directory>

重启生效。

Nginx

同样在需要保护的地方添加 basic 认证:

......
location /
.......
auth_basic "Authority Required"; # 验证时的提示信息,但并非所有终端都支持显示
auth_basic_user_file /var/www/html/.htpasswd ;
.......
}
......

同样重启生效。