Nginx基础IP黑白名单靠allow和deny指令实现,必须置于location或server块内;白名单需先allow后deny all,黑名单则先deny、依赖默认放行,大量规则推荐用include分离维护。

Nginx 实现基础 IP 黑白名单,不需要额外模块,靠 allow 和 deny 指令就能完成。关键不是功能有没有,而是规则写在哪、顺序对不对、兜底逻辑清不清楚。
必须写在 location 或 server 块里
不能直接丢在配置文件顶层。比如只想限制后台路径,就写在 location /admin/ { ... } 里;想整站控制,就放进 server { ... } 块中。写错位置,规则压根不生效。
白名单:只放行指定 IP,其余全拒
适合管理后台、调试接口这类敏感路径。逻辑是“先明确允许,再一概拒绝”:
- 每条
allow写一个可信 IP 或网段(如allow 192.168.5.0/24;、allow 2001:db8::1;) - 所有
allow写完后,必须紧接一行deny all; - 顺序不能颠倒,否则
deny all挡在前面,后面所有allow都没机会匹配
黑名单:封禁特定 IP,其余照常访问
适合临时拦截扫描或攻击源。逻辑是“先精准拦截,再默认放行”:
- 每条
deny写一个要封的 IP 或网段(如deny 198.51.100.25;、deny 203.0.113.0/24;) - 不需要写
allow all;—— Nginx 默认就放行未被deny的请求 - 如果已有其他
deny all在前,得确保黑名单规则排在它前面,否则会被提前拦截
大量规则别硬编码,用 include 拆出去
IP 条目一多,配置就难读难维护。推荐做法:
- 单独建文件,比如
/etc/nginx/conf.d/ip-blacklist.conf,里面只写deny行 - 在对应
location或server块里加一行:include /etc/nginx/conf.d/ip-blacklist.conf; - 修改后执行
nginx -t && nginx -s reload生效,不用重启进程
不复杂但容易忽略细节。配完建议用不同 IP 实测一下,确认放行和拦截行为符合预期。


















