我如何检查$ remote_addr IP是否在nginx的CIDR范围内?

我正在使用nginx latest web server 。 我如何检查$remote_addr ip是否在指定的CIDR rangereturn appropriate error code

如果IP不在特定的CIDR IP范围内,我想返回特定的错误代码。

我如何做到这一点的CIDR IP范围 ? 例如

  • 如果remote_addr不在123.123.123.123/24中,则返回444码。

您可以使用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; } 

这必须位于任何server块之外的http块中。

它将variables$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; } .... }