如何将 Nginx 的用户代理列入白名单?

如何将 Nginx 的用户代理列入白名单?

我正在尝试弄清楚如何从我的 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

相关内容