您现在的位置:kastop>> Kas信息 Kaspa网络>>正文内容

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

使用 HTTP 基本身份验证控制访问,并可选择与基于 IP 地址的访问控制结合使用。


介绍

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

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


先决条件

  • NGINX Plus 或 NGINX 开源

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


创建密码文件

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

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

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

    复制

    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; }

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

复制

server {     ...     auth_basic           "Administrator’s Area";     auth_basic_user_file conf/htpasswd;      location /public/ {         auth_basic off;     } }


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

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

  • 用户必须经过身份验证并具有有效的 IP 地址

  • 用户必须经过身份验证,或具有有效的 IP 地址

  1. 使用 allow 和 deny 指令允许或拒绝来自特定 IP 地址的访问:

    复制

    location /api {     #...     deny  192.168.1.2;     allow 192.168.1.1/24;     allow 127.0.0.1;     deny  all; }

    仅授予对网络(不包括地址)的访问权限。请注意,and 指令将按照它们定义的顺序应用。192.168.1.1/24192.168.1.2allowdeny

  2. 将 IP 和 HTTP 身份验证的限制与 satisfy 指令相结合。 如果将指令设置为 to ,则在客户端同时满足这两个条件时授予访问权限。如果将指令设置为 ,则在客户端满足至少一个条件时授予访问权限:allany

    复制

    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)



感动 同情 无聊 愤怒 搞笑 难过 高兴 路过
【字体: 】【收藏】【打印文章】 【 打赏 】 【查看评论

相关文章

    没有相关内容