洞悉 NGINX ngx_http_access_module基于 IP 的访问控制实战指南

一、模块概述

ngx_http_access_module 是 NGINX 核心模块之一,用于基于客户端 IP 地址或 UNIX 域套接字限制访问。它通过简单的 allow/deny 规则,对请求进行最先匹配原则的过滤。与基于密码(auth_basic)、子请求(auth_request)或 JWT(ngx_http_auth_jwt_module)相结合时,可通过 satisfy 指令灵活配置“与/或”关系。

二、指令语法

allow  address | CIDR | unix: | all;
deny   address | CIDR | unix: | all;
  • address:单个 IPv4 地址,如 192.168.1.10
  • CIDR:IPv4/IPv6 网段,如 10.1.0.0/162001:db8::/32
  • unix::匹配 UNIX 域套接字(1.5.1+)。
  • all:匹配所有客户端。

上下文http, server, location, limit_except

规则按出现顺序依次检查,直到命中为止;若无规则,则默认放行。

三、基础配置示例

location /admin/ {# 拒绝单个 IPdeny  192.168.1.1;# 允许同网段访问allow 192.168.1.0/24;allow 10.1.1.0/16;# 允许 IPv6 网段allow 2001:0db8::/32;# 默认拒绝所有其它deny  all;
}

上述配置效果:

  1. 192.168.1.1 被拒绝(优先于 192.168.1.0/24);
  2. 192.168.1.2–192.168.1.254 及 10.1.x.x、指定 IPv6 网段被允许;
  3. 其余地址返回 403 Forbidden。

四、与 satisfy 结合

当既要基于 IP,又要基于认证时,可使用:

location /secure/ {satisfy any;allow  192.168.0.0/24;deny   all;auth_basic           "Restricted";auth_basic_user_file /etc/nginx/htpasswd;
}
  • satisfy any:IP 白名单 HTTP 基本认证 任一通过即可;
  • 使用 satisfy all(默认)则需同时满足两者。

五、进阶用法

1. 全局与局部规则

  • httpserver 块定义默认规则,location 内可覆盖或补充。
  • limit_except 中可只对非 GET/HEAD 等方法应用 IP 控制。
limit_except GET HEAD {allow  10.0.0.0/8;deny   all;
}

2. 与 ngx_stream_geo_module 结合

当有大量网段或需动态更新时,推荐用 geo 模块预先匹配变量,再在 access 中引用:

geo $allowed {default        0;192.168.0.0/24 1;include        conf/allowed_geo.conf;
}server {location / {if ($allowed = 0) {return 403;}# 其它配置…}
}

六、性能与维护

  • 顺序匹配:将最常命中的规则放前,减少平均匹配次数。
  • 规则规模:少量时用 allow/deny 足矣;大量网段建议配合 geo 或外部文件 include
  • 字符处理:CIDR 与单 IP 都会被转换为无符号整数,匹配效率高;
  • 日志监控:可配合 error_log 监控 403 访问,及时调整规则。

七、安全与审计

  • 拒绝 all:应始终在最后一行写 deny all,防止开放未覆盖的 IP。
  • 正则与变量allow/deny 不支持正则,仅支持 CIDR;灵活场景下可配合 $remote_addrif 中使用正则或自定义变量。
  • 域内安全:使用 unix: 仅允许运行于本机的服务调用,提升安全性。

八、常见陷阱

  1. 位置错误allow/deny 必须在可见的上下文(serverlocation),否则无效。
  2. 未写 deny all:若只有 allow,但无默认 deny all,其他客户端仍然可访问。
  3. auth_basic 冲突:若既有密码又有 IP 控制,未设置 satisfy 时默认“与”关系,可能导致意外拒绝。

九、总结

ngx_http_access_module 提供了简单高效的基于地址访问控制,配合 satisfygeoauth_basic 等模块,可实现精细化安全策略。制作规则时要注意顺序与默认策略,针对不同场景合理拆分到全局 vs 局部,既能保障性能,也能提升可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据中台-数据质量管理系统:从架构到实战

一、数据质量管理系统核心优势解析​ ​ (一)可视化驱动的敏捷数据治理​ 在数据治理的复杂流程中,Kettle 的 Spoon 图形化界面堪称一把利器,为数据工程师们带来了前所未有的便捷体验。想象一下,你不再需要花费大量时间和精力去编写冗长且复杂的 SQL 脚本,只需通过简单…

数据分析之 商品价格分层之添加价格带

在分析货品数据的时候,我们会对商品的价格进行分层汇总,也叫价格带,​​ 一、价格带的定义​​ ​​价格带(Price Band)​​:将商品按价格区间划分(如0-50元、50-100元、100-200元等&#xff…

Maven 依赖范围(Scope)详解

Maven 依赖范围&#xff08;Scope&#xff09;详解 Maven 是一个强大的项目管理工具&#xff0c;广泛用于 Java 开发中构建、管理和部署应用程序。在使用 Maven 构建项目时&#xff0c;我们经常需要引入各种第三方库或框架作为项目的依赖项。通过在 pom.xml 文件中的 <depe…

vue3实现v-directive;vue3实现v-指令;v-directive不触发

文章目录 场景&#xff1a;问题&#xff1a;原因&#xff1a;‌ 场景&#xff1a; 列表的操作列有按钮&#xff0c;通过v-directive指令控制按钮显隐&#xff1b;首次触发了v-directive指令&#xff0c;控制按钮显隐正常&#xff1b;但是再次点击条件查询后&#xff0c;列表数…

数据结构【树和二叉树】

树和二叉树 前言1.树1.1树的概念和结构1.2树的相关术语1.3树的表示方法1.4 树形结构实际运用场景 2.二叉树2.1二叉树的概念和结构2.2二叉树具备以下特点&#xff1a;2.3二叉树分类 3.满二叉树4.完全二叉树5.二叉树性质6.附&#xff1a;树和二叉树图示 前言 欢迎莅临姜行运主页…

css面板视觉高度

css面板视觉高度 touch拖拽 在手机端有时候会存在实现touch上拉或者下拉的样式操作 此功能实现可以参考&#xff1a; https://blog.csdn.net/u012953777/article/details/147465162?spm1011.2415.3001.5331 面板视觉高度 前提需求&#xff1a; 1、展示端分为两部分&…

【Linux系统】详解Linux权限

文章目录 前言一、学习Linux权限的铺垫知识1.Linux的文件分类2.Linux的用户2.1 Linux下用户分类2.2 创建普通用户2.3 切换用户2.4 sudo&#xff08;提升权限的指令&#xff09; 二、Linux权限的概念以及修改方法1.权限的概念2.文件访问权限 和 访问者身份的相关修改&#xff08…

路由器的基础配置全解析:静态动态路由 + 华为 ENSP 命令大全

&#x1f680; 路由器的基础配置全解析&#xff1a;静态&动态路由 华为 ENSP 命令大全 &#x1f310; 路由器的基本概念&#x1f4cd; 静态路由配置&#x1f4e1; 动态路由协议&#xff1a;RIP、OSPF、BGP&#x1f5a5; 华为 ENSP 路由器命令大全&#x1f539; 路由器基本…

详细图解 Path-SAM2: Transfer SAM2 for digital pathology semantic segmentation

✨ 背景动机 数字病理中的语义分割&#xff08;semantic segmentation&#xff09;是非常关键的&#xff0c;比如肿瘤检测、组织分类等。SAM&#xff08;Segment Anything Model&#xff09;推动了通用分割的发展&#xff0c;但在病理图像上表现一般。 病理图像&#xff08;Pa…

初识Redis · 哨兵机制

目录 前言&#xff1a; 引入哨兵 模拟哨兵机制 配置docker环境 基于docker环境搭建哨兵环境 对比三种配置文件 编排主从节点和sentinel 主从节点 sentinel 模拟哨兵 前言&#xff1a; 在前文我们介绍了Redis的主从复制有一个最大的缺点就是&#xff0c;主节点挂了之…

HTTP header Cookie 和 Set-Cookie

RFC 6265: HTTP State Management Mechanismhttps://www.rfc-editor.org/rfc/rfc6265 Set-Cookie 响应头 服务器使用 Set-Cookie 响应头向客户端&#xff08;通常是浏览器&#xff09;发送 Cookie。 基本格式&#xff1a; Set-Cookie: <cookie名称><cookie值>;…

【Unity完整游戏开发案例】从0做一个太空大战游戏

1.实现飞机移动控制 // 这个脚本实现控制飞机前后移动&#xff0c;方向由鼠标控制 //1.WS控制前后移动2.鼠标控制上下左右旋转3.AD控制倾斜 using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerController : MonoBehav…

【C++】C++11新特性(一)

文章目录 列表初始化initializer_list左值引用和右值引用 列表初始化 在 C98 中可以使用{}对数组或者结构体元素进行统一的列表初始值设定 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; …

小黑享受思考心流: 73. 矩阵置零

小黑代码 class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""items []m len(matrix)n len(matrix[0])for i in range(m):for j in range(n):if not m…

精益数据分析(19/126):走出数据误区,拥抱创业愿景

精益数据分析&#xff08;19/126&#xff09;&#xff1a;走出数据误区&#xff0c;拥抱创业愿景 在创业与数据分析的探索之旅中&#xff0c;我们都渴望获取更多知识&#xff0c;少走弯路。今天&#xff0c;我依然带着和大家共同进步的想法&#xff0c;深入解读《精益数据分析…

循环神经网络RNN---LSTM

一、 RNN介绍 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;简称 RNN&#xff09;是一种专门用于处理序列数据的神经网络&#xff0c;在自然语言处理、语音识别、时间序列预测等领域有广泛应用。 传统神经网络 无法训练出具有顺序的数据。模型搭建时没有考…

优考试V4.20机构版【附百度网盘链接】

优考试局域网考试系统具有强大的统计分析功能。优考试通过对考试数据进行统计分析&#xff0c;诸如考试分数分布&#xff0c;考试用时分布&#xff0c;错排行等&#xff0c;让你从整体上了解你的学员&#xff08;员工&#xff09;状态&#xff0c; 同时你也可以对学员&#xff…

【Amazing晶焱科技高速 CAN Bus 传输与 TVS/ESD/EOS 保护,将是车用电子的生死关键无标题】

台北国际车用电子展是亚洲地区重量级的车用电子科技盛会&#xff0c;聚焦于 ADAS、电动车动力系统、智慧座舱、人机界面、车联网等领域。各大车厂与 Tier 1 供应链无不摩拳擦掌&#xff0c;推出最新技术与创新解决方案。 而今年&#xff0c;“智慧座舱” 无疑将成为全场焦点&am…

面试:结构体默认是对齐的嘛?如何禁止对齐?

是的。 结构体默认是对齐的‌。结构体对齐是为了优化内存访问速度和减少CPU访问内存时的延迟。结构体对齐的规则如下&#xff1a; 某数据类型的变量存放的地址需要按有效对齐字节剩下的字节数可以被该数据类型所占字节数整除&#xff0c;char可以放在任意位置&#xff0c;int存…

如何优雅地解决AI生成内容粘贴到Word排版混乱的问题?

随着AI工具的广泛应用&#xff0c;越来越多人开始使用AI辅助撰写论文、报告或博客。然而&#xff0c;当我们直接将AI生成的文本复制到Word文档中时&#xff0c;常常会遇到排版混乱、格式异常的问题。这是因为大部分AI输出时默认使用了Markdown格式&#xff0c;而Word对Markdown…