要在Nginx中拦截特定的用户代理(User Agent),你可以使用$http_user_agent
变量结合if
条件或map
指令来实现。以下是几种实现方法:
server {
listen 80;
server_name example.com;
# 拦截特定User Agent
if ($http_user_agent ~* (恶意机器人|BadBot|SpiderBot)) {
return 403;
}
# 其他配置...
location / {
# 正常配置
}
}
map $http_user_agent $bad_agent {
default 0;
"~*恶意机器人" 1;
"~*BadBot" 1;
"~*SpiderBot" 1;
}
server {
listen 80;
server_name example.com;
if ($bad_agent) {
return 403;
}
# 其他配置...
}
server {
listen 80;
server_name example.com;
location / {
if ($http_user_agent ~* (恶意机器人|BadBot|SpiderBot)) {
return 403;
}
# 正常配置
}
}
server {
listen 80;
server_name example.com;
set $block_user_agent 0;
if ($http_user_agent ~ "恶意机器人") {
set $block_user_agent 1;
}
if ($http_user_agent ~ "BadBot") {
set $block_user_agent 1;
}
if ($block_user_agent = 1) {
access_log /var/log/nginx/bad_agents.log;
return 403;
}
# 其他配置...
}
~*
表示不区分大小写的正则匹配|
符号分隔include
引入对于更复杂的用户代理拦截需求,可以考虑使用Nginx的geoip模块或嵌入lua脚本实现更灵活的拦截逻辑。
希望这些方法能帮助你有效拦截特定的用户代理访问。