Nginx使用HTTP基本身份验证限制访问

Nginx使用HTTP基本身份验证限制访问

 

介绍

您可以通过实现用户名/密码身份验证来限制对网站或网站某些部分的访问。用户名和密码取自由密码文件创建工具创建并填充的文件,例如apache2-utils

HTTP基本身份验证也可以与其他访问限制方法结合使用,例如通过IP地址地理位置限制访问。

 

先决条件

  • NGINX Plus或NGINX开源
  • 密码文件创建实用程序,例如apache2-utils(Debian,Ubuntu)或httpd-tools(RHEL / CentOS / Oracle Linux)。

 

创建密码文件

要创建用户名-密码对,请使用密码文件创建实用程序,例如,apache2-utilshttpd-tools

  1. 确认已安装apache2-utils(Debian,Ubuntu)或httpd-tools(RHEL / CentOS / Oracle Linux)。

  2. 创建密码文件和第一个用户。运行htpasswd带有-c标志的实用程序(以创建一个新文件),文件路径名作为第一个参数,用户名作为第二个参数:

    $ sudo htpasswd -c /etc/apache2/.htpasswd user1

    按Enter,然后在提示时键入user1的密码。

  3. 创建其他用户密码对。省略-c标志,因为文件已经存在:

    $ sudo htpasswd /etc/apache2/.htpasswd user2
  4. 您可以确认该文件包含成对的用户名和加密的密码:

    $ cat /etc/apache2/.htpasswd
    user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
    user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
    user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/

 

配置NGINX和NGINX Plus以进行HTTP基本身份验证

  1. 在要保护的位置内,指定auth_basic指令并为密码保护的区域命名。询问凭据时,该区域的名称将显示在用户名/密码对话框窗口中:

    location /api {
        auth_basic “Administrator’s Area”;
        #...
    }
  2. auth_basic_user_file使用包含用户/密码对的.htpasswd文件的路径指定指令:

    location /api {
        auth_basic           “Administrator’s Area”;
        auth_basic_user_file /etc/apache2/.htpasswd; 
    }

另外,您可以使用基本身份验证来限制对整个网站的访问,但仍将某些网站区域设为公开。在这种情况下,请指定指令的off参数,该auth_basic指令取消从较高配置级别的继承:

server {
    ...
    auth_basic           "Administrator’s Area";
    auth_basic_user_file conf/htpasswd;

    location /public/ {
        auth_basic off;
    }
}

 

将基本身份验证与IP地址的访问限制相结合

HTTP基本身份验证可以有效地结合IP地址的访问限制。您可以至少实现两种方案:

  • 用户必须经过身份验证并具有有效的IP地址
  • 用户必须经过身份验证或具有有效的IP地址
  1. 使用allowdeny指令允许或拒绝来自特定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地址除外)授予访问权限。请注意,allowdeny指令将按其定义的顺序应用。

  2. 将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;
    }

 

完整的例子

该示例显示了如何通过简单的身份验证以及IP地址的访问限制来保护您的状态区域:

http {
    server {
        listen 192.168.1.23:8080;
        root   /usr/share/nginx/html;

        location /api {
            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 /etc/apache2/.htpasswd; 
        }
    }
}

当您访问状态页面时,系统会提示您登录:

auth_required

如果提供的名称和密码与密码文件不匹配,则会出现错误。401 (Authorization Required)

 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值