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
确认已安装
apache2-utils
(Debian、Ubuntu)或httpd-tools
(RHEL/CentOS/Oracle Linux)。创建密码文件和第一个用户。使用
-c
标志(创建新文件),将文件路径名作为第一个参数,将用户名作为第二个参数,运行该实用程序:htpasswd
复制
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/
配置 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; } }
将基本身份验证与按 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; }
仅授予对网络(不包括地址)的访问权限。请注意,and 指令将按照它们定义的顺序应用。
192.168.1.1/24
192.168.1.2
allow
deny
将 IP 和 HTTP 身份验证的限制与 satisfy 指令相结合。 如果将指令设置为 to ,则在客户端同时满足这两个条件时授予访问权限。如果将指令设置为 ,则在客户端满足至少一个条件时授予访问权限:
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; } } }
当您访问状态页面时,系统会提示您登录:
如果提供的名称和密码与密码文件不匹配,则会收到错误。401 (Authorization Required)
感动 | 同情 | 无聊 | 愤怒 | 搞笑 | 难过 | 高兴 | 路过 |
相关文章
-
没有相关内容