最常用且稳妥的方式是在管理接口的 location 块中使用 allow 和 deny 指令配合 cidr 表示法,关键在于规则位置、顺序及兜底设置是否正确。

直接在管理接口对应的 location 块里用 allow 和 deny 指令,配合 CIDR 表示法写网段,是最常用也最稳妥的方式。关键不是“能不能”,而是规则位置、顺序和兜底是否写对。
只允许指定网段访问管理接口
比如你有个 Nginx 状态页 /status 或后台接口 /admin/,只想让内网 10.0.5.0/24 访问:
- 打开对应站点的配置文件(如
/etc/nginx/conf.d/example.com.conf) - 在
server块里找到或新增location /admin/ { ... } - 在里面写:
allow 10.0.5.0/24; deny all;
- 注意:
deny all必须放在最后,否则前面的allow不生效
拒绝特定公网网段访问管理路径
如果要封掉已知恶意网段(比如 203.0.113.0/24),但其他 IP 仍可访问管理接口:
- 同样进入
location /admin/ { }或location /status { } - 写:
deny 203.0.113.0/24; allow all;
- 这里
allow all是显式放行其余流量,避免遗漏导致全部被拒 - IPv6 网段要加方括号,例如:
deny [2001:db8::/32];
用外部文件集中管理多个网段
当要管控的网段较多(比如几十个黑名单),或者多个站点共用同一套规则时,推荐抽离为独立文件:
- 新建文件:
sudo nano /etc/nginx/conf.d/admin-access.conf - 内容示例:
deny 192.168.100.0/24; deny 203.0.113.128/25; allow 10.0.0.0/8; allow 172.16.0.0/12; allow 192.168.0.0/16; deny all;
- 在目标
location块中加入:include /etc/nginx/conf.d/admin-access.conf; - 保存后运行
nginx -t验证语法,再nginx -s reload
验证和避坑要点
配置完别急着以为生效了,这几个点常被忽略:
- 作用域必须匹配:规则写在
location /admin/里,就只对这个路径生效;写在server块顶层,则影响整个域名下所有路径 - 顺序即逻辑:Nginx 按行从上到下匹配,一旦命中就终止判断。所以
allow和deny的排列顺序决定最终效果 - 没有兜底会失效:只写
deny 1.2.3.4;不加deny all或allow all,其余 IP 默认全放行 - 重载必须执行:改完配置不运行
nginx -s reload,旧进程还在跑,新规则不会起效











