nginx 阻止指定user-agent
在 Nginx 中阻止特定的 user-agent 可以通过配置 Nginx 的 if 模块或者使用 map 模块来完成。但是,需要注意的是,从 Nginx 1.1.18 开始,官方文档推荐使用 map 模块来更高效地处理这类需求,因为它避免了在每个请求中执行条件语句的开销。
使用 map 模块
定义 map 变量:
使用 if 模块(不推荐)
在 Nginx 的配置文件中,你可以定义一个 map 块来根据 user-agent 设置一个变量。
http {
map $http_user_agent $block_user_agent {
# 这里添加你想要阻止的 user-agent 模式
"~*Googlebot" 1;
"~*bingbot" 1;
default 0;
}
server {
...
}
}然后,你可以在 server 块中使用这个变量来决定是否返回特定的响应或者拒绝请求。
server {
...
if ($block_user_agent) {
return 403; # 或者其他适当的响应
}
...
}注意事项
使用正则表达式时,确保正确地使用了大小写敏感性(例如,使用 ~* 表示不区分大小写的匹配)。
在使用 if 时要谨慎,因为它可能导致意外的性能问题。尽可能使用 map 模块来优化性能。
确保你的 Nginx 版本支持你想要使用的特性(例如,较新版本的 Nginx 支持更高效的 map 模块)。
通过上述方法,你可以有效地阻止特定的 user-agent 访问你的网站。
