当需要阻止某些特定的 UserAgent(如恶意爬虫、扫描工具等)访问网站时,可以通过 Nginx 配置实现。
在 Nginx 配置文件中(通常在 server
或 location
块中)添加以下内容:
if ($http_user_agent ~* (恶意UA1|恶意UA2|恶意UA3)) {
return 403;
# 或者 return 444; (Nginx特有的直接关闭连接)
}
map $http_user_agent $badagent {
default 0;
"~*恶意UA1" 1;
"~*恶意UA2" 1;
"~*扫描工具" 1;
# 可以继续添加更多
}
server {
# ...其他配置...
if ($badagent) {
return 403;
}
}
if ($http_user_agent ~* (wget|curl|httrack|nikto|sqlmap|nmap|zgrab|python-requests)) {
return 403;
}
server {
listen 80;
server_name example.com;
# 禁止特定UserAgent访问
if ($http_user_agent ~* (SemrushBot|AhrefsBot|MJ12bot|DotBot|Baiduspider|YandexBot)) {
return 403;
}
# 禁止空UserAgent
if ($http_user_agent = "") {
return 403;
}
# 其他正常配置...
location / {
root /var/www/html;
index index.html;
}
}
nginx -t
测试语法nginx -s reload
重载配置access.log
中监控403请求,验证规则是否生效如果需要记录被拦截的请求,可以修改为:
if ($http_user_agent ~* (恶意UA)) {
access_log /var/log/nginx/bad_agents.log;
return 403;
}
这样可以在单独的日志文件中记录所有被拦截的请求,便于后续分析。