0%

Nginx配置Basic Authentication认证

依赖

  • NGINX
  • 认证文件创建工具,这里演示的是使用apache2-utils

创建认证文件

  1. 安装apache2-utils
1
sudo apt install apache2-utils
  1. 创建认证文件,-c是创建新的文件
1
2
3
4
sudo htpasswd -c /etc/apache2/.htpasswd user1
# 按提示输入user1的密码
# 也可以直接在命令中输入密码,加上-b参数
sudo htpasswd -cb /etc/apache2/.htpasswd user1 password
  1. 添加额外的用户
1
sudo htpasswd /etc/apache2/.htpasswd user2
  1. 查看/etc/apache2/.htpasswd文件,示例内容如下
1
2
3
4
$ cat /etc/apache2/.htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/

配置NGINX

  1. 在要加认证的路径中,增加 auth_basic配置
1
2
3
4
location /api {
auth_basic "Administrator’s Area";
#...
}
  1. 配置认证文件 auth_basic_user_file
1
2
3
4
location /api {
auth_basic "Administrator’s Area";
auth_basic_user_file /etc/apache2/.htpasswd;
}

同样,也可以配置在整个server下面,如果某个路径不需要认证,增加auth_basic:off即可

1
2
3
4
5
6
7
8
9
server {
...
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;

location /public/ {
auth_basic off;
}
}

Basic Authentication与IP相结合

设想以下场景

  • 既要认证,又要要求IP白名单才可以访问
  • 认证或者IP白名单可以访问
  1. 使用 allowdeny指令
1
2
3
4
5
6
7
location /api {
#...
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
}

拒绝来自192.168.1.2的访问,允许192.168.1.1/24网段内的访问。 deny, allow按顺序匹配。

  1. 结合satisfy 指令,如果设置为all,则需要满足所有条件才可以访问,如果设置为any,则ip认证和basic auth认证满足其中一个即可,如
1
2
3
4
5
6
7
8
9
10
11
12
location /api {
#...
satisfy all;

deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;

auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
}