插件窝 干货文章 Nginx如何实现基于IP地址的访问控制配置

Nginx如何实现基于IP地址的访问控制配置

Nginx 配置 控制 765    来源:    2025-04-10

Nginx基于IP地址的访问控制配置

Nginx提供了多种方式来实现基于IP地址的访问控制,以下是几种常见的配置方法:

1. 使用allow/deny指令

在Nginx配置文件中,可以使用allowdeny指令来控制IP访问:

location / {
    # 允许特定IP
    allow 192.168.1.1;
    allow 192.168.1.2;

    # 拒绝所有其他IP
    deny all;

    # 其他配置...
}

2. 基于CIDR范围的访问控制

location /admin {
    # 允许192.168.1.0/24网段
    allow 192.168.1.0/24;

    # 允许10.0.0.0/8网段
    allow 10.0.0.0/8;

    # 拒绝其他所有
    deny all;
}

3. 使用geo模块进行复杂IP控制

http {
    # 定义IP分组
    geo $limited {
        default 1;
        192.168.1.0/24 0;
        10.0.0.0/8 0;
    }

    server {
        location / {
            # 如果$limited为1则拒绝访问
            if ($limited) {
                return 403;
            }

            # 其他配置...
        }
    }
}

4. 结合map模块的动态控制

http {
    map $remote_addr $allowed_ip {
        default 0;
        192.168.1.1 1;
        192.168.1.2 1;
        10.0.0.0/8 1;
    }

    server {
        location / {
            if ($allowed_ip = 0) {
                return 403;
            }

            # 其他配置...
        }
    }
}

5. 使用ngx_http_access_module模块(默认已包含)

server {
    location /secure {
        # 允许特定IP
        allow 192.168.1.100;

        # 拒绝特定IP
        deny 203.0.113.5;

        # 拒绝所有其他IP
        deny all;
    }
}

注意事项

  1. 指令的执行顺序很重要,Nginx会按顺序匹配第一条符合条件的规则
  2. httpserverlocation块中都可以使用这些指令
  3. 对于大量IP规则,建议使用geomap模块以提高性能
  4. 修改配置后记得重载Nginx:nginx -s reload
  5. 对于动态IP控制,可以考虑结合Lua脚本或其他编程语言扩展

最佳实践

  • 将常用IP白名单放在单独文件中并通过include引入
  • 对管理后台等敏感区域实施IP限制
  • 定期审核IP访问规则
  • 考虑使用防火墙配合Nginx实现多层防护

以上配置可以根据实际需求组合使用,实现灵活的IP访问控制策略。