在 Nginx(或openresty) 中拒绝(deny)一个 IP 段可以通过 deny
指令结合 CIDR 表示法(无类别域间路由)来实现。以下是具体操作步骤:
1. 修改 Nginx 配置文件
找到你的 Nginx 配置文件(通常为 nginx.conf
或站点配置文件,如 /etc/nginx/sites-available/default
),在需要限制的 server
或 location
块中添加规则。
示例配置
server { listen 80; server_name example.com; # 拒绝特定 IP 段(如 192.168.1.0/24) deny 192.168.1.0/24; # 允许其他所有 IP allow all; location / { root /var/www/html; index index.html; } }
2. CIDR 表示法说明
192.168.1.0/24
:表示从192.168.1.0
到192.168.1.255
的所有 IP。10.0.0.0/16
:表示从10.0.0.0
到10.0.255.255
的所有 IP。
3. 规则生效顺序
Nginx 的 allow
和 deny
指令按从上到下的顺序匹配,遵循“首次匹配优先”原则。
若需拒绝某个 IP 段但允许其中的个别 IP,需将 allow
放在 deny
之后:
# 先允许特定 IP,再拒绝整个段 allow 192.168.1.100; deny 192.168.1.0/24; allow all;
4. 重载 Nginx 配置
保存文件后,检查语法并重载配置:
# 检查语法 sudo nginx -t # 重载配置(无需重启服务) sudo nginx -s reload
5. 验证规则
通过以下方式测试 IP 是否被拒绝:
- 使用被拒绝的 IP 访问网站,观察是否返回
403 Forbidden
。 - 查看 Nginx 访问日志:
tail -f /var/log/nginx/access.log
常见场景示例
场景 1:拒绝多个 IP 段
deny 192.168.1.0/24; deny 10.0.0.0/16; allow all;
场景 2:仅拒绝特定路径
location /admin { deny 192.168.1.0/24; allow all; # 其他配置... }
注意事项
- 防火墙配合:大规模 IP 拦截建议结合防火墙(如
iptables
或ufw
)使用,以减轻 Nginx 负担。 - 动态 IP 拦截:对于频繁变化的 IP 攻击,可结合
fail2ban
工具实现动态封禁。
通过上述步骤,你可以高效地通过 Nginx 拒绝特定 IP 段的访问。