Nginx 要阻止某个 IP 访问, 非常简单, 一个 deny 关键字就够了. 如要阻止 1.2.3.4 这个 IP, 即:
deny 1.2.3.4;
当想要阻止 1.2.3 这个网段的下的所有 IP, 你会很自然的想到通配符, 于是你会试着写:
deny 1.2.3.*;
但可惜, nginx deny 语法并不支持 * 这样的通配符格式, 但好在支持 CIDR 声明 格式.
CIDR(无类别域间路由, Classless Inter-Domain Routing) 是一个在 Internet 上创建附加地址的方法, 这些地址提供给服务提供商 (ISP), 再由 ISP 分配给客户. CIDR 将路由集中起来, 使一个 IP 地址代表主要骨干提供商服务的几千个 IP 地址, 从而减轻 Internet 路由器的负担.
CIDR 主要是一个按位的, 基于前缀的, 用于解释 IP 地址的标准. 它通过把多个地址块组合到一个路由表表项而使得路由更加方便.
IPv4 的 CIDR 地址块的表示方法和 IPv4 地址的表示方法是相似的: 由四部分组成的点分十进制地址, 后跟一个斜线, 最后是范围在 0 到 32 之间的一个数字: A.B.C.D/N.
所以, 要阻止 1.2.3 网段下的所有地址, 要这么写:
deny 1.2.3.0/24;
参考资料:
- Nginx Block And Deny IP Address OR Network Subnets
- NGINX deny IP wildcard?
无类别域间路由
来源: http://www.mzh.ren/nginx-deny-a-ip-range.html