nginx启用密码保护访问(BasicAuth)

2021-03-10 1062点热度 0人点赞 0条评论

前言

有时候,我们用Nginx搭建的网站,不想让所有用户访问,就可以设置访问密码验证,只要输入正确用户名和密码才能访问,如图:

实现

nginx是通过ngx_http_auth_basic_module这个模块来实现用户名密码保护(basic_auth)的,一般来说安装好的nginx都自带这个模块的。

首先,我们需要生成可以访问的用户名和密码,并保存到文件中。Linux下用到的是htpasswd

如果你的服务器上没有,请先安装htpasswd(可以使用which htpasswd看是否安装过)

  • CentOS等服务器,请用 yum  -y install httpd-tools
  • Ubuntu等服务器,请用apt install apache2-utils,直接直接打htpasswd,如果没有会提示你要安装哪个包

现在生成密码,假设我们把密码文件存放在/etc/nginx/passwd,新增、删除、更新密码等其他命令,我都在放在下面并进行了注释

# 第一次使用,可以加参数-c 生成一个新的passwd文件,但是添加第二个用户的是否,不要使用-c,否则前一个用户就覆盖掉了
[root@localhost ~]# htpasswd -c /etc/nginx/passwd admin
New password: 
Re-type new password: 
Adding password for user admin 

# 加了-c 参数,会把之前全部的用户名密码记录清空,所以去掉-c
htpasswd /etc/nginx/passwd admin2

# 还可以直接把用户名和密码写在一起添加
htpasswd -b /etc/nginx/passwd admin2 password2

# 删除用户
htpasswd -D /etc/nginx/passwd zhangsan
# 或者可以直接修改passwd文件,删除某一行就可以了

#修改密码和新建一样,如果已有的帐号就会更新
htpasswd /etc/nginx/passwd zhangsan

# 直接在屏幕上显示用户名和密码加密后一行,不保存到文件
htpasswd -nb admin2 password2

修改nginx配置文件

主要增加这两行:

#新增下面两行
auth_basic "Please input password"; #这里是验证时的提示信息 
auth_basic_user_file /etc/nginx/passwd; #验证用户名密码的文件

如果是整站需要密码验证,可以加到server下面:

server {
    listen 80;
    server_name  demo.example.com;
 
    #新增如下验证
    auth_basic "Please input password";
    auth_basic_user_file /etc/nginx/passwd;
 
    location / {
         #其他省略
    }

    #其他省略
}

如果是某个路径需要密码验证,加到location下面:

location ^~ /demo {
    root /var/www/demo/;
    index index.html;

    # 增加如下
    auth_basic "Please input password";
    auth_basic_user_file /etc/nginx/passwd;
}

以上配置好了,重启下nginx就可以看到效果咯。

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论