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

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

我正在使用nginx latest web server。如何检查$remote_addrIP 是否不在指定的范围内CIDR rangereturn 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;
    }
    ....
}

相关内容