问:我希望能够仅为包含特定标头的请求启用基本身份验证。
用例:仅对请求通过 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
)