
Nginx 配置允许指定 IP 段访问一、需求与结论假设你要在 Nginx 中只允许192.168.1.1 ~ 192.168.1.124访问某个站点或目录。Nginx 的allow/deny指令只支持单个 IP例如192.168.1.10CIDR 网段例如192.168.1.0/24它不支持这种写法allow 192.168.1.1-192.168.1.124; # 错误所以必须把 IP 范围拆成多个 CIDR 段再按顺序配置。二、精确覆盖 192.168.1.1 ~ 192.168.1.124如果要求精确覆盖.1到.124可以这样拆server { listen 80; server_name example.com; location / { allow 192.168.1.1/32; # 1 allow 192.168.1.2/31; # 2-3 allow 192.168.1.4/30; # 4-7 allow 192.168.1.8/29; # 8-15 allow 192.168.1.16/28; # 16-31 allow 192.168.1.32/27; # 32-63 allow 192.168.1.64/27; # 64-95 allow 192.168.1.96/28; # 96-111 allow 192.168.1.112/29; # 112-119 allow 192.168.1.120/30; # 120-123 allow 192.168.1.124/32; # 124 deny all; root /var/www/html; index index.html; } }注意deny all;必须放在最后。Nginx 按顺序匹配命中第一条allow或deny就生效。三、简化写法如果.0、.125、.126、.127这些地址实际不会使用可以简化为allow 192.168.1.0/25; # 覆盖 192.168.1.0 ~ 192.168.1.127 deny all;这样写更简单但范围会比.1 ~ .124略宽会额外允许.0和.125 ~ .127。如果只是想允许整个192.168.1.x网段则可以用/24allow 192.168.1.0/24; deny all;四、/24 是多少/24是 CIDR 表示法表示子网掩码255.255.255.0以192.168.1.0/24为例项目值子网掩码255.255.255.0网络前缀24 位主机位8 位总 IP 数256 个IP 范围192.168.1.0 ~ 192.168.1.255传统可用主机254 个通常 .0 是网络地址.255 是广播地址在 Nginx 中allow 192.168.1.0/24; deny all;表示允许整个192.168.1.0 ~ 192.168.1.255访问。Nginx 层面会匹配这 256 个地址。五、只限制某个路径如果只想保护后台或管理目录location /admin/ { allow 192.168.1.0/25; deny all; proxy_pass http://127.0.0.1:8080; }这样只有指定 IP 段能访问/admin/其他 IP 返回 403。六、全局限制也可以放在http、server或location块中http { allow 192.168.1.0/25; deny all; }一般建议放在server或location中避免影响所有站点。七、反向代理后如何拿到真实 IP如果 Nginx 前面还有负载均衡、CDN 或反向代理$remote_addr拿到的可能是代理 IP而不是客户端真实 IP。这时需要配置真实 IP 模块set_real_ip_from 10.0.0.0/8; # 你信任的代理网段 real_ip_header X-Forwarded-For; real_ip_recursive on;配置后allow/deny才会按客户端真实 IP 生效。八、常见坑Nginx 不支持 IP 范围写法192.168.1.1-192.168.1.124必须拆成 CIDR。deny all;要放最后Nginx 按顺序匹配放错位置会导致规则不符合预期。403 Forbidden通常是被deny all;拦截检查 CIDR 是否写错。反向代理下 IP 不生效检查是否配置了set_real_ip_from、real_ip_header。修改后验证并重载nginx-tnginx-sreload九、CIDR 速查表CIDR可用地址数子网掩码/24256255.255.255.0/25128255.255.255.128/2664255.255.255.192/2732255.255.255.224/2816255.255.255.240/298255.255.255.248/304255.255.255.252/312255.255.255.254/321255.255.255.255十、总结Nginx 用allow/deny做 IP 访问控制。不支持192.168.1.1-192.168.1.124必须拆成 CIDR。精确覆盖.1 ~ .124可以用多个 CIDR 段。如果允许整个192.168.1.x直接写192.168.1.0/24。/24表示255.255.255.0范围是192.168.1.0 ~ 192.168.1.255。前面有代理时要配置真实 IP否则allow/deny可能失效。参考https://www.ecjson.com/article/206.html