前言
有时候,我们用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就可以看到效果咯。
文章评论