找不到构建下一个方案的方法。
- 允许的 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 配置整洁。
希望我能帮上忙。