仅当请求中存在某个标头时才进行基本身份验证?

仅当请求中存在某个标头时才进行基本身份验证?

:我希望能够仅为包含特定标头的请求启用基本身份验证。

用例:仅对请求通过 LB 发出的特定客户端进行身份验证(并与 LB 设置的标头匹配)。

我尝试使用 IF 指令,但没有成功。有人能提供一个小型配置示例来说明如何实现这一点吗?

答案1

根据文件auth_basic指令,您不能在if块中使用该指令,但可以使用变量作为值。

因此,使用地图来测试特定条件并使用生成的变量。

map $http_<header_name> $authentication {
    default    "off";
    "~^"       "my_realm";
}


server {

     ...    

    location /foo {

        auth_basic $authentication;
        auth_basic_user_file /path/to/htpasswd/file;

        ...
    }

}

必须将模式<header_name>替换为标题的名称,使用小写字母和下划线代替破折号(例如My-Header变成$http_my_header

相关内容