用curl模拟指定IP测试黑白名单最可靠:白名单IP应返回200,黑名单IP应返回403且不转发,未匹配IP按策略响应;需查Nginx error.log确认拦截日志,并配合real_ip_module与X-Forwarded-For还原真实IP,修改后须nginx -t校验并reload生效。

直接用不同来源的请求验证最可靠,重点看返回状态码和日志反馈。
用 curl 模拟指定 IP 发起请求
在目标服务器或跳转机器上执行,借助 X-Forwarded-For 或真实出口 IP 测试:
- 测试白名单:用被允许的 IP(如
192.168.10.5)访问受控路径,应返回 200 或后端正常响应 - 测试黑名单:用被拒绝的 IP(如
203.0.113.5)请求同一路径,应立即返回 403 Forbidden,且不转发到后端 - 测试兜底行为:用未出现在 allow/deny 列表中的任意 IP 访问,白名单场景应得 403,黑名单场景应得 200(或后端响应)
检查 Nginx 错误日志确认拦截动作
黑白名单触发时,Nginx 默认不记 access log,但会在 error.log 中记录拒绝详情(需开启 debug 日志或留意 warn 级别):
- 找到配置中指定的 error_log 路径,例如:
/var/log/nginx/error.log - 发起一次被 deny 的请求后,执行:
tail -f /var/log/nginx/error.log | grep "client denied" - 若看到类似
client denied by rule的条目,说明规则已生效
配合 real_ip_module 验证 CDN/代理后的真实 IP 控制
如果服务前有 CDN、WAF 或反向代理,$remote_addr 是代理 IP,必须先还原真实客户端 IP 才能正确匹配黑白名单:
- 确认已启用
real_ip_module,并在 server 块中配置:set_real_ip_from 192.168.0.0/16;(填代理网段) - 加上:
real_ip_header X-Forwarded-For;或X-Real-IP(依实际头字段而定) - 用 curl 加头模拟:
curl -H "X-Forwarded-For: 192.168.10.5" http://yoursite/admin/,观察是否按真实 IP 规则放行
用 nginx -t + reload 后快速验证配置语法与热更新
每次修改黑白名单后,务必执行两步避免服务中断:
- 先运行:
nginx -t—— 确认配置语法无误、IP 格式合法(如 CIDR 掩码错误会报错) - 再执行:
nginx -s reload—— 平滑重载,新规则即时生效,无需重启进程 - 改完立刻用上面的 curl 方法测一遍,防止 deny all 写错位置导致全站 403


















