特定子目录的NGINX用户代理阻塞

0vvn1miw  于 2023-03-12  发布在  Nginx
关注(0)|答案(1)|浏览(130)

我试图阻止某个用户代理访问NGINX中的某个子目录。
我试着这么做:

location ~ /subdir {
       if ( $http_user_agent ~ (BOT)) {
        return 403;
    }
       }

但是这阻止了所有人访问该目录,就好像if指令被完全忽略了一样。我不明白为什么这不起作用。

wsewodh2

wsewodh21#

对于复杂的Nginx配置,添加另一个location块并不简单,使用map块可能更容易实现。
map块必须放置在http上下文中,例如,刚好在server块的开头上方

map $request_uri $target_subdir {
~*^/subdir/   1;
}

map $http_user_agent $access_denied {
~*BOT         $target_subdir;
}

server {
    ...
    if ($access_denied) { return 403; }
    ...
}

map块是级联的。如果用户代理匹配,则评估请求的URI。只有当两者都返回true时,访问才会被拒绝。

相关问题