nginx 中除列出的用户代理外的所有用户的基本身份验证

nginx 中除列出的用户代理外的所有用户的基本身份验证

我写过类似的问题关于 Apache 配置,但我对 nginx 也很感兴趣。

nginx 配置中除了指定的用户代理之外,是否可以要求所有用户进行基本身份验证?

答案1

经过几个晚上的研究和反复试验,我发现可以将map指令与指令的自定义变量结合起来创建条件身份验证auth_basic

map $http_user_agent $authentication {
    default "Access Restricted";
    "~^PayPal IPN" "off";
    # ...
}

server {
    # ...
    location / {
        auth_basic $authentication;
        auth_basic_user_file /etc/nginx/.htpasswd;
        # ...
    }
}

答案2

是的,使用 nginx 指令可以实现map

例如:

map $http_user_agent $auth {
    default 0;
    "~Chrome" 1;
}

server {
    ... other vhost config ...
    if ($auth = 1) {
        auth_basic "Authenticate";
        auth_basic_user_file /path/to/authfile;
    }
}

map指令查看第一个参数中指定的变量,并根据map块内的信息声明第二个变量的值。

然后我们使用该$auth变量来查看是否要进行身份验证。

map您可以在 nginx map 文档页面中阅读更多有关如何匹配不同字符串的信息http://nginx.org/en/docs/http/ngx_http_map_module.html

相关内容