Nginx如何设置用户登录验证
十二月 28, 2023 [网络与安全] #obsidian #vpn #密码学 #网络Nginx如何设置用户登录验证
nginx开启访问验证
使用nginx搭建的网站,如果不想让所有用户都能正常访问,那么可以设置访问认证,只有用户输入正确的用户名和密码才能正常访问。
在nginx下,提供了ngx_http_auth_basic_module模块,实现让用户只有输入正确的用户名密码才允许访问WEB内容。
默认情况下,nginx已经安装了该模块。所以整体的一个过程就是先用第三方工具( htpasswd,或者使用openssl)设置用户名、密码(其中密码已经加过密),然后保存到文件中,然后在nginx配置文件中根据之前事先保存的文件开启访问验证。
以htpasswd为例
- 安装htpasswd工具
yum -y install nginx #安装nginx
yum -y install httpd-tools #安装httpd-tools
- 设置指定用户及密码
cd /etc/nginx/
touch .passwd #创建生成密码的文件
htpasswd -c /etc/nginx/.passwd Nihao #设置用户名和密码,并把用户名、密码保存到指定文件中
New password:
Re-type new password:
Adding password for user Nihao
注意:上面的 /etc/nginx/.passwd 是生成密码文件的路径,然后Nihao是用户名,你可以根据需要自行设置成其它用户名。运行命令后,会要求你连续输入两次密码。输入成功后,会提示已经为Nihao这个用户添加了密码。
cat .passwd #查看生成的密码文件的内容
Nihao:$apr1$Lna.yg7m$n6g9180iZQP7GXJ447CE0/ #用户名Nihao,冒号后面是密码(已经加密)
- 修改nginx配置文件
vim nginx.conf #在第一个server模块下添加
##########
location / {
auth_basic "Please input password";
auth_basic_user_file /etc/nginx/.passwd;
}
##########
nginx -t #检查配置文件是否有误
systemctl restart nginx #重启nginx
firewall-cmd --add-port=80/tcp #添加防火墙端口
4、浏览器访问验证
会出现提示要身份验证
htpasswd命令
选项参数
「htpasswd [ -c ] [ -i ] [ -m | -B | -d | -s | -p ] [ -C cost ] [ -D ] [ -v ] passwdfile username」
「htpasswd -b [ -c ] [ -m | -B | -d | -s | -p ] [ -C cost ] [ -D ] [ -v ] passwdfile username password」
「htpasswd -n [ -i ] [ -m | -B | -d | -s | -p ] [ -C cost ] username」
「htpasswd -nb [ -m | -B | -d | -s | -p ] [ -C cost ] username password」
htpasswd命令选项参数说明:
-c 创建一个加密文件
-n 不更新加密文件,只将htpasswd命令加密后的用户名,密码显示在屏幕上
-m 默认htpassswd命令采用MD5算法对密码进行加密
-d htpassswd命令采用CRYPT算法对密码进行加密
-p htpassswd命令不对密码进行进行加密,即明文密码
-s htpassswd命令采用SHA算法对密码进行加密
-b htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
-D 删除指定的用户
htpasswd例子
(1)用htpasswd命令添加用户
htpasswd -bc .passwd ren001 123 #在当前目录下生成一个.passwd文件,用户名ren001,密码:123,默认采用MD5加密方式
(2)在原有密码文件中增加下一个用户
htpasswd -b .passwd ren002 456
cat .passwd
ren001:$apr1$Ln1ZsyVn$2hn3VFqP0L5tNA1UCSU8F.
ren002:$apr1$hCiMb9jc$Z.m7ZgOBCj0ISeIieTaVy/ #去掉c选项,即可在第一个用户之后添加第二个用户,依此类推
(3)不更新密码文件,只显示加密后的用户名和密码
htpasswd -nb ren002 456
ren002:$apr1$DT53A20W$YRS7p4j.1Wum9q0kG3OQv. #不更新.passwd文件,只在屏幕上输出用户名和经过加密后的密码
(4)用htpasswd命令删除用户名和密码
htpasswd -D .passwd ren002
Deleting password for user ren002
cat .passwd
ren001:$apr1$Ln1ZsyVn$2hn3VFqP0L5tNA1UCSU8F.
(5)用 htpasswd 命令修改密码
htpasswd -D .passwd ren001
Deleting password for user ren001
htpasswd -b .passwd ren001 123456
Adding password for user ren001