依赖
- NGINX
- 认证文件创建工具,这里演示的是使用apache2-utils
创建认证文件
- 安装apache2-utils
1
| sudo apt install apache2-utils
|
- 创建认证文件,-c是创建新的文件
1 2 3 4
| sudo htpasswd -c /etc/apache2/.htpasswd user1 # 按提示输入user1的密码 # 也可以直接在命令中输入密码,加上-b参数 sudo htpasswd -cb /etc/apache2/.htpasswd user1 password
|
- 添加额外的用户
1
| sudo htpasswd /etc/apache2/.htpasswd user2
|
- 查看/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
- 在要加认证的路径中,增加 auth_basic配置
1 2 3 4
| location /api { auth_basic "Administrator’s Area"; }
|
- 配置认证文件 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白名单可以访问
- 使用 allow和 deny指令
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按顺序匹配。
- 结合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; }
|