我试图阻止某个用户代理访问NGINX中的某个子目录。我试着这么做:
location ~ /subdir { if ( $http_user_agent ~ (BOT)) { return 403; } }
但是这阻止了所有人访问该目录,就好像if指令被完全忽略了一样。我不明白为什么这不起作用。
wsewodh21#
对于复杂的Nginx配置,添加另一个location块并不简单,使用map块可能更容易实现。map块必须放置在http上下文中,例如,刚好在server块的开头上方。
location
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时,访问才会被拒绝。
1条答案
按热度按时间wsewodh21#
对于复杂的Nginx配置,添加另一个
location
块并不简单,使用map
块可能更容易实现。map
块必须放置在http
上下文中,例如,刚好在server
块的开头上方。map
块是级联的。如果用户代理匹配,则评估请求的URI。只有当两者都返回true时,访问才会被拒绝。