Nginx访问控制IP白名单配置限制来源 Nginx
前言
后台、管理接口、测试环境只允许固定 IP 访问,其他来源一律拒绝。Nginx 的 allow/deny 指令可以按 IP 段做白名单,配合 403 返回。本文讲解 location 级白名单、整站白名单、拒绝其余所有 IP、多 IP 与网段写法,以及反代时取真实 IP 的注意事项。
操作步骤
1. 只允许指定 IP 访问后台
location /admin/ {
allow 1.2.3.4;
allow 10.0.0.0/8;
deny all;
proxy_pass http://backend;
}
allow 写可信来源,deny all 拒绝其余全部。
2. 整站白名单(内网开放)
server {
listen 80;
allow 192.168.1.0/24;
allow 1.2.3.4;
deny all;
}
3. 放行多个 IP 和网段
allow 1.1.1.1;
allow 2.2.2.0/24;
allow 3.3.3.3;
deny all;
4. 校验并重载
nginx -t
nginx -s reload
5. 测试访问控制
curl -I https://域名/admin/
不在白名单的 IP 返回 403,白名单 IP 正常进入。
6. 反代场景取真实 IP
经过 CDN 或反代时,$remote_addr 是代理 IP,需先配 real_ip 模块还原访客 IP,否则白名单全部失效。
常见坑
- 顺序错误:deny all 写在 allow 前面,所有 IP 都被拒。
- 经过 CDN 直接 deny all,真实访客全被挡。
- 只对 location 配白名单,其他路径仍可访问。
- 办公 IP 是动态的,白名单要定期更新。
- 网段写法错误,/24 写成 255.255.255 无效。
- 同时用了云安全组,两层规则要保持一致。
- 白名单不能替代登录鉴权,它只是网络层限制。
总结
IP 白名单用 allow 列可信来源、deny all 兜底,可放 server 整站或 location 单路径。反代必须先还原真实 IP。白名单适合后台、测试、内网接口,仍要配合账号登录,不能把它当成唯一防线。
遇到问题加QQ23979811 协助处理