nginx黑白名单核心区别在于逻辑起点和规则顺序:白名单先allow后deny all,黑名单先deny后allow all;必须置于server或location块内,支持ipv4/ipv6,需按域名或路径隔离配置,并注意cdn与代理适配。

Nginx 是最常用也最直接的服务器 IP 访问控制工具,黑白名单配置不复杂,但顺序和位置稍有偏差就会失效。核心就两点:白名单是“只放行指定 IP”,黑名单是“先封禁再放行其余”,所有规则都必须写在 server 或 location 块里,不能放在 http 全局块中。
白名单怎么配(严格限制访问)
适用于后台、API 调试页、数据库代理等敏感路径。逻辑是:先 allow,最后 deny all,缺一不可。
- 所有
allow必须写在deny all;之前 -
deny all;是兜底项,漏掉就等于没限制 - 支持 IPv4 单地址(如
allow 203.0.113.25;)、IPv4 网段(如allow 192.168.50.0/24;)、IPv6(如allow 2001:db8::/32;)
示例(仅允许内网和本地访问 /admin/):
location /admin/ {
allow 192.168.10.0/24;
allow 127.0.0.1;
deny all;
}
黑名单怎么配(临时封禁恶意 IP)
适合屏蔽扫描器、爬虫或已知攻击源。逻辑是:先 deny,最后 allow all,否则可能全拒。
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
- 多条
deny可叠加,顺序无关(只要都在allow all;前) -
allow all;是必需的,否则未匹配的请求会被默认拒绝 - 注意别误伤健康检查接口或静态资源(比如
/healthz或/static/)
示例(封禁两个恶意 IP,其他照常访问):
location / {
deny 203.0.113.5;
deny 198.51.100.12;
allow all;
}
按域名或路径隔离配置
一台服务器跑多个站点时,黑白名单必须分开写:
-
admin.example.com的server块里配白名单 -
www.example.com的server块里配黑名单 - 若只想限制 PHP 接口,就写在
location ~ \.php$ { }里,而不是location / { },避免被 rewrite 绕过
进阶建议(规则变多或要自动化)
-
用
geo预定义变量:在http块里统一管理 IP 列表,再用if控制,性能更好、易脚本更新 -
抽成外部文件:把 IP 规则存为
/etc/nginx/conf.d/ip-whitelist.conf,用include引入,方便 CI/CD 和版本管理 -
注意 CDN 和代理:真实客户端 IP 可能被
X-Forwarded-For传递,需配合set_real_ip_from和real_ip_header使用,否则会误封 CDN 节点 IP
不复杂但容易忽略细节。










