通常的解决方案
通常的需求是针对几个ip做白名单、或者针对内网ip做白名单,这样的范围比较少。使用 if 判断 remote_addr 就可以很好的解决了。
复杂的场景
如果需要对一个城市、一个国家做 ip 名单,那么应该如何操作呢?
实现方法
可以考虑使用 nginx 的 ngx_http_geoip 模块,配合 Maxmind ip 库来实现 https://nginx.org/en/docs/http/ngx_http_geoip_module.html https://www.miyuru.lk/geoiplegacy
另一种方案
上面的 ip 数据是 nginx 支持格式的,不清楚用什么方法解析出来,并且数据量更大,但我们只需要针对城市做白名单就好了,所以最终的方案如下: 使用之前获取的城市ip(用来做iptables规则的),改写为 allow 格式放入单独的文件中,然后再 include 到 server 中
评论