Nginx 配置允许指定 IP 段访问:从 192.168.1.1 到 192.168.1.124 及 /24 详解

Nginx 配置允许指定 IP 段访问

一、需求与结论

假设你要在 Nginx 中只允许:

text 复制代码
192.168.1.1 ~ 192.168.1.124

访问某个站点或目录。

Nginx 的 allow / deny 指令只支持:

  • 单个 IP,例如 192.168.1.10
  • CIDR 网段,例如 192.168.1.0/24

它不支持这种写法:

nginx 复制代码
allow 192.168.1.1-192.168.1.124;  # 错误

所以必须把 IP 范围拆成多个 CIDR 段,再按顺序配置。


二、精确覆盖 192.168.1.1 ~ 192.168.1.124

如果要求精确覆盖 .1 到 .124,可以这样拆:

nginx 复制代码
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 这些地址实际不会使用,可以简化为:

nginx 复制代码
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 网段,则可以用 /24:

nginx 复制代码
allow 192.168.1.0/24;
deny  all;

四、/24 是多少?

/24 是 CIDR 表示法,表示子网掩码:

text 复制代码
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 中:

nginx 复制代码
allow 192.168.1.0/24;
deny  all;

表示允许整个 192.168.1.0 ~ 192.168.1.255 访问。Nginx 层面会匹配这 256 个地址。


五、只限制某个路径

如果只想保护后台或管理目录:

nginx 复制代码
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 块中:

nginx 复制代码
http {
    allow 192.168.1.0/25;
    deny  all;
}

一般建议放在 server 或 location 中,避免影响所有站点。


七、反向代理后如何拿到真实 IP

如果 Nginx 前面还有负载均衡、CDN 或反向代理,$remote_addr 拿到的可能是代理 IP,而不是客户端真实 IP。

这时需要配置真实 IP 模块:

nginx 复制代码
set_real_ip_from 10.0.0.0/8;      # 你信任的代理网段
real_ip_header   X-Forwarded-For;
real_ip_recursive on;

配置后,allow / deny 才会按客户端真实 IP 生效。


八、常见坑

  1. Nginx 不支持 IP 范围写法

    192.168.1.1-192.168.1.124 必须拆成 CIDR。

  2. deny all; 要放最后

    Nginx 按顺序匹配,放错位置会导致规则不符合预期。

  3. 403 Forbidden

    通常是被 deny all; 拦截,检查 CIDR 是否写错。

  4. 反向代理下 IP 不生效

    检查是否配置了 set_real_ip_from、real_ip_header。

  5. 修改后验证并重载

    bash 复制代码
    nginx -t && nginx -s reload

九、CIDR 速查表

CIDR 可用地址数 子网掩码
/24 256 255.255.255.0
/25 128 255.255.255.128
/26 64 255.255.255.192
/27 32 255.255.255.224
/28 16 255.255.255.240
/29 8 255.255.255.248
/30 4 255.255.255.252
/31 2 255.255.255.254
/32 1 255.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
相关推荐
SHENGWEI胜为6 小时前
二层网络广播风暴如何排查?从交换机接口计数器到 STP 拓扑变化分析
网络
智慧光迅AINOPOL7 小时前
园区全光网IP+POL架构怎么设计:组网拓扑与带宽演进
网络协议·tcp/ip·架构
艾芯微科技7 小时前
HR911130C|汉仁 HANRUN 集成变压器千兆 RJ45 网口参数、电路、PCB 布线、替代与采购避坑
网络·单片机·嵌入式硬件·集成测试·51单片机
日常筹谋记7 小时前
工业厂房 TPO 防水卷材:技术需求如何传导到配方层面?
运维·网络·html
TechWayfarer9 小时前
PHP漏洞被利用,怎么揪出攻击IP?
开发语言·python·tcp/ip·网络安全·php
玄芯散人11 小时前
【元婴·106】I2C总线:地址冲突、Clock Stretching、总线死锁怎么破
网络
YH_Analytics11 小时前
2026 年增亮膜(DBEF)行业市场格局深度解析
大数据·网络
dk_tjy11 小时前
迪康网络运维故障自愈的自动化闭环技术路径分析
运维·网络·自动化
万联WANFLOW12 小时前
让分散的设备像在同一张局域网里:企业组网技术解析
运维·网络·网络安全·智能路由器