NGINX:基于IP或请求标头跳过HTTP基本身份验证



nginx.conf中的 http块包含以下内容:

auth_basic $development_exceptions;

在随附的文件中,geo模块用于设置变量:

geo $development_exceptions {
     default "Not allowed.";
    1.2.3.4 "off";
}

map模块在同一文件中使用用户代理变量:

map $http_user_agent $development_exceptions  { 
    default "Not allowed.";
    ~*(header-text) "off";
}

但是,开发异常变量的设置正在竞争,因此,当应用第二个代码时,第一个代码停止执行任何操作。

如何合并这两种策略?在这种情况下,可能无法更改nginx.conf

然后您应该尝试以下方法

geo $development_exceptions_geo {
    default "Not allowed.";
    1.2.3.4 "off";
}
map $http_user_agent $development_exceptions_agent  { 
    default "Not allowed.";
    ~*(header-text) "off";
}

现在,如果要使用or条件,则可以在下面进行

map $development_exceptions_agent$development_exceptions_geo $development_exceptions {
    ~off "off";
    default "Not allowed.";
}

如果您想要and条件,则可以在下面进行

map $development_exceptions_agent$development_exceptions_geo $development_exceptions {
    ~offoff "off";
    default "Not allowed.";
}

我想结合'允许的ip列表'或'某些用户代理来绕过身份验证,工作:

geo $auth_geo {
    default "Authentication required";
    18.184.113.24 "off"; # pingdom
    35.158.65.6 "off";   # pingdom
    52.87.44.246 "off";  # url.thum.io
    52.44.29.90 "off";   # url2.thum.io
}
map $http_user_agent $auth_agent {
    default "Auth required";
    "~PingdomPageSpeed" "off";
    "~cutycapt" "off";
    "~Chrome-Lighthouse" "off";
}
map $auth_geo$auth_agent $auth {
    ~off "off";
    default "Not allowed.";
}

然后使用类似于:

location ~ .php$ {
    auth_basic $auth;
    auth_basic_user_file /etc/nginx/custom/website/htpasswd;
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_pass $phpupstream;
}

我不知道auth_basic_user是否也可以是相关路径(?)。

最新更新