我正在尝试弄清楚如何从我的 nginx 配置中将用户代理列入白名单。所有其他代理都应显示密码提示。
在我天真的时候,我尝试在之前添加以下内容deny all
:
if ($http_user_agent ~* SpecialAgent ) { allow; }
但我被告知"allow" directive is not allowed here
(!)。
我怎样才能让它工作?
我的配置文件的一部分:
server {
server_name site.com;
root /var/www/site;
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
allow 123.456.789.123;
deny all;
satisfy any;
#other stuff...
}
谢谢你的帮助。
答案1
如果只需要按用户代理列入白名单(而不是 IP 或其他条件),并且不想重新编译 Nginx 以包含 auth_request 模块,您还可以使用 map 指令检查用户代理并有条件地禁用基本身份验证。
map $http_user_agent $auth_type {
default "Restricted";
~^Mozilla "off";
}
server {
location / {
auth_basic $auth_type;
}
}
这将关闭 Mozilla 用户代理的基本身份验证。
答案2
您可以使用 auth_request 模块来实现这一点。