Nginx. 白名单顶部过滤器和无身份验证白名单以及同时进行基本身份验证

Nginx. 白名单顶部过滤器和无身份验证白名单以及同时进行基本身份验证

找不到构建下一个方案的方法。

  • 允许的 IP 白名单。禁止大部分网络。
  • 允许绕过身份验证的白名单 IP 子列表。例如,本地网络的一部分。
  • 对其余部分进行基本身份验证,允许但不能绕过其 IP。

逻辑看起来并不复杂。但是,由于基本身份验证和所有/任何匹配交互比较棘手,我只能同时编写包含三个中的两个的配置(基本身份验证 + 无身份验证白名单等)。

有任何 nginx 的配置示例吗?

答案1

首先,这个问题问得好,你让我想到了这个问题,我不得不寻找一个合适的方法来解决这个问题,但我找不到。(所以我将尝试为你的问题提供一个可能有用的“牛仔”答案)。

我认为它可能起作用的是映射 IPS,并根据您所述它属于 3 个组中的哪一个组赋予它们一个值。

map $remote_addr $perm_group {
1.1.1.1.1    2; #ips that don't need basic_auth
1.1.1.1.2    1; #Basic_auth ips
default    0; #Banned ips
}

然后在服务器支架处:

server{
    listen 80;
    server_name example.com;

    if ( $perm_group = 0 ){
      return 403; # ips blacklisted return a 403;
    }

    if ( $perm_group = 1 ){
          auth_basic "Restricted";
    }

    if ( $perm_group = 2 ){
          auth_basic off;
    }
              auth_basic_user_file /etc/nginx/yourAuthFile; #make a file with user/password
    # anything else will mean that are allowed, so we go with the normal handling.

    location / {
        #do what you need to do here
    }

}

这是我第一次编写这种代码,但它应该可以工作,注释掉任何错误,如果出现任何问题我们就会首次亮相。

如果您想要对大量 IP 进行分组排序,则可以在映射中包含将对 IP 进行排序的文件,这样就可以保持 nginx 配置整洁。

希望我能帮上忙。

相关内容