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
相关推荐
Csvn1 天前
Nginx 配置语法与上下文:一次搞懂继承、变量与用 map 替掉 if
后端·nginx
略懂而已1 天前
安装SSL后网站速度变慢?
网络·网络协议·ssl
云上工程笔记1 天前
RDMA / IB 高速互联 GPU 云对比:多机训练网络性能与价格
网络·gpu算力·gpu
codigger1 天前
负载均衡到底在干嘛?7 个场景给你说明白
网络·架构·负载均衡
吴建旭 智宅焕2 天前
智能家居全国交付中执行端能力跃迁的架构设计:从标准装调到交付专家的系统化路径
网络·网络协议·智能家居
Eyfcom2 天前
〖全球化架构 05〗跨国网络专线优化:QUIC 协议与 SD-WAN 在跨境传输中的实战
网络·架构·跨境物流快递系统·全球化架构
Dream Cosmos2 天前
传输层协议之UDP
网络·网络协议·udp
鸿蒙开发爱好者2 天前
下班后做的小工具和小游戏,我把它们整理成了 WyanHub
网络·人工智能·职场和发展·个人开发
乐橙开放平台2 天前
海康和大华摄像头能统一管理吗?可以通过 GB28181 或视频融合平台接入
网络·后端·物联网·音视频
张小姐的猫2 天前
【基于 WebSocket 的多用户网页五子棋】—— 项目结构设计与实用工具类模块
网络·websocket·网络协议