NGINX:如果设置了某个 HTTP 标头,如何允许完全访问,否则触发 HTTP 基本身份验证

NGINX:如果设置了某个 HTTP 标头,如何允许完全访问,否则触发 HTTP 基本身份验证

正如问题所暗示的,如果X-AuthHTTP 标头已设置并包含特定字符串,我希望允许对我的网站进行完全访问。如果不是这种情况,则应触发 HTTP 基本身份验证。如下所示:

if ($http_x_auth = "some_string") {
  allow access;
} else {
  auth_basic "Authentication";
  auth_basic_user_file /etc/nginx/security_http_basic_auth_file;
}

不幸的是,NGINX 不允许 if else 语句。有人知道如何做到这一点吗?

答案1

你可以这样做map

http块中:

map $http_x_auth $has_basic_auth {
    "some_string" no_basic_auth;
    default with_basic_auth;
}

在你的location区块中:

try_files nonexistent @$has_basic_auth;

然后添加两个named location

location @no_basic_auth {
    # insert your config
}
location @with_basic_auth {
    # insert your config with basic auth
}

相关内容