核心原理
Nginx 自带 ngx_http_access_module 模块,通过 allow(允许)和 deny(拒绝)指令实现IP黑白名单,顺序绝对不能颠倒:必须先写允许的白名单IP,再写拒绝所有其他IP,否则规则会失效。
location / {
allow 123.123.123.123;
deny all;
}
关键代码如下,也可以放在已有的nginx伪静态最前面
allow 123.123.123.123;
deny all;
常见问题排查
- 配置后所有IP都访问不了:肯定是
allow和deny顺序写反了,必须先allow再deny all。 - 配置后所有IP都能访问:
- 检查规则是不是放在了正确的
location里,被其他配置覆盖了; - 如果用了CDN/代理,是不是没配置真实IP获取规则,也没放行CDN/代理的IP段;
- 检查IP是不是写错了,有没有多余的空格。
- 检查规则是不是放在了正确的
- 被拦截后返回404而不是403:可以自定义错误页面,在
server块里加:error_page 403 /403.html; location = /403.html { root /var/www/error; internal; }
