在开始配置之前,请确保你的服务器已经安装了 Nginx。本教程以 Linux 环境为例,涵盖 CentOS 和 Ubuntu 系统。Nginx 的访问控制功能由 ngx_http_access_module 模块提供,该模块默认已内置,无需额外安装。
1. 安装 Nginx
如果尚未安装,请执行以下对应系统的命令进行安装:
yum install nginx -yapt install nginx -y2. 确认配置文件路径
通常 Nginx 的主配置文件位于 /etc/nginx/nginx.conf,而站点配置通常存放在 /etc/nginx/conf.d/ 目录下。本教程将直接在 server 块中进行演示,你可以根据实际情况调整路径。
黑名单用于拒绝特定的 IP 地址或网段访问网站。这是最常见的安全防护手段,可以有效阻断恶意扫描或攻击源。
1. 修改配置文件
打开你需要配置的站点配置文件,在 server 块中添加 deny 指令。以下是一个完整的配置示例:
```nginx server { listen 80; server_name example.com; 设置黑名单:拒绝 192.168.1.100 和 10.0.0.0/8 网段访问 deny 192.168.1.100; deny 10.0.0.0/8; 允许其他所有 IP 访问(虽然默认是允许,但写上更清晰) allow all; location / { root /usr/share/nginx/html; index index.html index.htm; } } ```2. 配置详解
3. 测试并重载配置
配置修改完成后,必须先测试语法是否正确,再重载服务:
4. 验证效果
在被拒绝的 IP 机器上执行 curl -I http://example.com,将返回 403 Forbidden。在允许的 IP 机器上执行相同命令,则返回 200 OK。
白名单用于内部系统或后台管理页面,仅允许指定的 IP 地址访问,拒绝其他所有连接。配置白名单时,规则的顺序至关重要。
1. 修改配置文件
在 server 块或特定的 location 块中添加规则。注意:必须先写 allow,最后写 deny all。
```nginx server { listen 80; server_name admin.example.com; 设置白名单:仅允许公司内网和特定 IP 访问 allow 192.168.1.0/24; 允许内网网段 allow 203.0.113.5; 允许特定外网 IP(如老板的办公 IP) 拒绝其他所有 IP deny all; location / { root /usr/share/nginx/html/admin; index index.html; } } ```2. 配置逻辑详解
Nginx 的访问控制规则是自上而下进行匹配的,一旦匹配成功则停止后续规则:
3. 生效配置
当 IP 列表很长时,直接写在主配置文件中会导致难以维护。最佳实践是将黑白名单规则存放在独立的文件中,然后在主配置中引用。
1. 创建黑名单文件

在 Nginx 配置目录下创建 blockips.conf 文件:
在文件中输入拒绝规则(不需要写 server 或 location 块):
```nginx /etc/nginx/conf.d/blockips.conf deny 123.45.67.89; deny 101.102.103.0/24; deny 11.22.33.44; ```2. 在主配置中引用
回到 nginx.conf 或站点配置文件中,使用 include 指令:
```nginx http { ... 其他配置 引入黑名单文件,这将作用于 http 块下的所有 server include /etc/nginx/conf.d/blockips.conf; server { listen 80; server_name example.com; ... } } ```如果只想针对某个网站生效,可以将 include 放在对应的 server 块内。
3. 动态更新维护
以后需要添加封禁 IP 时,只需编辑 blockips.conf 文件,添加一行 deny 1.2.3.4;,保存后执行 nginx -t && systemctl reload nginx 即可,无需动主配置文件。
除了标准的 IP 和网段,Nginx 还支持更灵活的配置方式。
1. 精确网段配置
使用 CIDR 格式可以精确控制网段大小:
2. 配置优先级陷阱避坑
如果在 http、server、location 三个层级都配置了规则,Nginx 会以最小范围(最内层)的配置为准,且所有层级的规则都会被读取并合并判断。
例如:http 层写了 allow all,location 层写了 deny all。如果请求进入该 location,最终结果是 deny all。建议将访问控制规则尽量靠近业务逻辑层(即 location 块)配置,避免逻辑混乱。
配置完成后,如果出现预期之外的情况,请按以下步骤排查。
1. 强制检查语法
修改配置后必须执行 nginx -t。如果提示 directive "allow" is not allowed here,说明你将 allow/deny 指令放在了不支持的位置(例如 if 块中,access 模块不支持在 if 中使用)。
2. 检查规则顺序
这是最常见的错误。白名单模式必须确保 deny all 在所有 allow 规则之后。如果 deny all 在最前面,所有访问都将被拒绝。
3. 查看错误日志
如果客户端一直报错 403 或 500,查看 Nginx 错误日志定位原因:
4. 清除浏览器缓存
浏览器可能缓存了之前的 403 或 200 状态。测试时建议使用 curl 命令,或者使用浏览器的无痕模式,以确保获取最新的服务器响应。
上一篇: 网站合规安全,别等罚单来了才拍大腿!
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图