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

7 nginx

我正在使用nginx latest web server. 我如何检查$remote_addrip 是否不在指定CIDR rangereturn appropriate error code.

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

我如何为 CIDR IP 范围执行此操作?例如

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

Mic*_*ton 17

您可以使用该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;
}
Run Code Online (Sandbox Code Playgroud)

这必须在http块中,在任何server块之外。

$block_these_turkeys根据 IP 地址是否与列表之一匹配,将变量设置为给定值。

稍后,在server要使用它的块中,执行以下操作:

server {
    ....
    if ($block_these_turkeys) {
        return 444;
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)

通过反转该值,您可以改为允许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;
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)