1. 介绍
您可以通过实施用户名/密码身份验证来限制对网站或网站某些部分的访问。用户名和密码取自密码文件创建工具(例如 apache2-utils)创建并填充的文件。
HTTP基本身份验证也可以与其他访问限制方法结合使用,例如通过IP地址或地理位置限制访问。
2. 先决条件
- NGINX Plus或NGINX开源版
- 密码文件创建实用程序,例如apache2-utils(Debian,Ubuntu)或httpd-tools(RHEL / CentOS / Oracle Linux)。
3. 创建密码文件
要创建用户名-密码对,请使用密码文件创建实用程序,例如,apache2-utils或httpd-tools。
- 确认已安装apache2-utils(Debian,Ubuntu)或httpd-tools(RHEL / CentOS / Oracle Linux)。
- 创建密码文件和第一个用户。运行htpasswd带有-c标志的实用程序(以创建一个新文件),文件路径名作为第一个参数,用户名作为第二个参数:
$ sudo htpasswd -c /etc/apache2/.htpasswd user1
按Enter,然后在提示时键入user1的密码。
- 创建其他用户密码对。省略-c标志,因为该文件已经存在:
$ sudo htpasswd /etc/apache2/.htpasswd user2
- 您可以确认该文件包含成对的用户名和加密的密码:
$ cat /etc/apache2/.htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/
4. 配置NGINX和NGINX Plus以进行HTTP基本身份验证
- 在要保护的位置内,指定auth_basic指令并为密码保护的区域命名。要求提供凭据时,该区域的名称将显示在用户名/密码对话框窗口中:
location /api {
auth_basic “Administrator’s Area”;
#...
}
- 使用auth_basic_user_file指令指定包含用户/密码对的 .htpasswd 文件的路径:
location /api {
auth_basic “Administrator’s Area”;
auth_basic_user_file /etc/apache2/.htpasswd;
}
另外,您可以使用基本身份验证来限制对整个网站的访问,但仍将某些网站区域设为公开。在这种情况下,请指定auth_basic指令的off参数,该指令取消从较高配置级别继承::
server {
...
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
location /public/ {
auth_basic off;
}
}
5. 将基本身份验证与IP地址访问限制相结合
HTTP基本身份验证可以有效地结合IP地址的访问限制。您可以至少实现两种方案:
- 用户必须同时经过身份验证并具有有效的IP地址
- 用户必须经过身份验证或具有有效的IP地址
- 使用allow和deny指令允许或拒绝来自特定IP地址的访问:
location /api {
#...
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
}
仅对192.168.1.1/24网络(192.168.1.2地址除外)授予访问权限。请注意,allow和deny指令将按其定义的顺序应用。
- 将IP和HTTP身份验证的限制与satisfy指令结合使用。如果将指令设置为all,如果客户端同时满足两个条件,则将授予访问权限。如果将指令设置为any,如果客户端至少满足以下条件,则将授予访问权限:
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;
}
6. 完整的例子
该示例显示了如何通过简单身份验证以及IP地址访问限制来保护您的状态区域:
http {
server {
listen 192.168.198.133:80;
root /usr/share/nginx/html;
location /api {
api;
satisfy all;
deny 192.168.198.2;
allow 192.168.198.0/24;
allow 127.0.0.1;
deny all;
auth_basic "Administrator’s Area";
auth_basic_user_file /etc/apache2/.htpasswd;
}
}
}
当您访问状态页面时,系统会提示您登录:
如果提供的名称和密码与密码文件不匹配,则会出现401 (Authorization Required)错误。
参考文档
https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/