Nginx配置Basic Auth登录认证,要求用户名密码

Nginx配置Basic Auth登录认证

有时候我们通过nginx搭建了一台文件服务器, 一般来讲是公开的, 但我们又希望该服务器不让他人看到, 有人可能会搭建一个登录系统, 但是太麻烦, 也没太大必要, 比较简单的做法是配置Basic Auth登录认证(ngx_http_auth_basic_module)。

Nginx配置Basic Auth登录认证,要求用户名密码
Nginx站点用户名密码难

nginx编译时默认已经包含这个模块,我们只需要做一下简单的配置即可实现http认证。

1、确定你安装了httpd-tools

# 检测是否已经安装了 httpd
$ httpd -v
Server version: Apache/2.4.34 (Unix)
Server built: Feb 22 2019 20:20:11

# 没安装的执行
yum install httpd-tools -y

2、创建授权用户和密码

htpasswd可以用于生成用户信息

生成用户及密码

htpasswd -c -d /usr/local/openresty/nginx/conf/auth_file user

# 这个配置文件存放路径可以自定义,方便管理就行, 其中user是允许登录的用户名(可以自定义)

htpasswd其它操作

#删除用户
#htpasswd -D /etc/nginx/.passwd daichongweb

#修改密码
#htpasswd -d /etc/nginx/.passwd daichongweb123

#其他命令
-c:创建一个加密文件
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上
-m:默认采用MD5算法对密码进行加密
-d:采用CRYPT算法对密码进行加密
-p:不对密码进行进行加密,即明文密码
-s:采用SHA算法对密码进行加密
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码
-D:删除指定的用户

3、配置Nginx Basic Auth

大致配置如下:

location/{
auth_basic"这里随意起个名字";
auth_basic_user_file/usr/local/openresty/nginx/conf/auth_file;
}
  • auth_basic 认证开关,默认是off(即关闭认证)。除了off以外的都是启用auth。
  • auth_basic_user_file 账户密码文件,可以通过htpasswd生成,路径一定要和上一步的目录相同。

4、使用

# 浏览器中使用
直接在浏览器中输入地址, 会弹出用户密码输入框, 输入即可访问

# 使用 wget
wget --http-user=user --http-passwd=123456 http://localhost/

# 使用 curl
curl -u user:123456 -O http://localhost/

5、访问限制

经常看体验盒子文章的同学会发现,之前我们分享了很多弱口令暴力破解的项目,其中就有域用户密码破解的,为了防止暴力破解,我们可以用nginx的ngx_http_limit_req_module模块进行访问限制。更多nginx安全设置可参考《Nginx与安全有关的一些配置》。

limit_req_zone $binary_remote_addr zone=limiter:10m rate=20r/s;
server {
....
location / {
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
limit_req zone=limiter burst=1 nodelay;
}
}

上面表示同一ip地址1秒最多只能访问20次,超过限制会立即返回错误。