我写过类似的问题关于 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