![nginx 中除列出的用户代理外的所有用户的基本身份验证](https://linux22.com/image/708110/nginx%20%E4%B8%AD%E9%99%A4%E5%88%97%E5%87%BA%E7%9A%84%E7%94%A8%E6%88%B7%E4%BB%A3%E7%90%86%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E7%94%A8%E6%88%B7%E7%9A%84%E5%9F%BA%E6%9C%AC%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81.png)
我写过类似的问题关于 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