我正在使用nginx latest web server
。如何检查$remote_addr
IP 是否不在指定的范围内CIDR range
。return appropriate error code
如果 IP 不在特定的 CIDR IP 范围内,我希望返回特定的错误代码。
我如何针对 CIDR IP 范围执行此操作例如
- 如果 remote_addr 不在 123.123.123.123/24 中,则返回 444 代码。
答案1
您可以使用geo
指令指定 IP 地址范围。
以下是一个例子:
geo $block_these_turkeys {
default 0;
192.0.2.0/24 1;
198.51.100.0/24 1;
203.0.113.0/24 1;
2001:db8::/32 1;
}
这必须位于http
块内,且位于任何server
块之外。
$block_these_turkeys
它根据 IP 地址是否与其中一个列表匹配,将变量设置为给定值。
稍后,在server
您想要使用它的块中,执行以下操作:
server {
....
if ($block_these_turkeys) {
return 444;
}
....
}
经过倒车值,你可以允许IP 范围。
geo $block_almost_everybody {
default 1;
192.0.2.0/24 0;
198.51.100.0/24 0;
203.0.113.0/24 0;
2001:db8::/32 0;
}
server {
....
if ($block_almost_everybody) {
return 444;
}
....
}