当前位置: 首页>>AGI专栏>>正文


nginx/openresty怎么deny一个ip段

在 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 是否被拒绝:

  1. 使用被拒绝的 IP 访问网站,观察是否返回 403 Forbidden
  2. 查看 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 段的访问。

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/4836.html,转载请注明来源链接。