插件窝 干货文章 Nginx中配置过滤爬虫的User-Agent方法

Nginx中配置过滤爬虫的User-Agent方法

爬虫 Nginx User Agent 914    来源:    2025-04-21

Nginx配置过滤爬虫的User-Agent方法

在Nginx中过滤爬虫可以通过识别User-Agent来实现。以下是几种常用的配置方法:

方法一:使用if条件判断

server {
    listen 80;
    server_name example.com;

    # 定义要阻止的爬虫User-Agent列表
    set $block_user_agents 0;

    if ($http_user_agent ~* (wget|curl|scrapy|python-requests|python-urllib|java|httpclient|go-http-client|php|ruby|perl|nikto|sqlmap|nmap)) {
        set $block_user_agents 1;
    }

    # 可以继续添加更多爬虫标识
    if ($http_user_agent ~* (bot|spider|crawler|slurp|mediapartners-google)) {
        set $block_user_agents 1;
    }

    if ($block_user_agents = 1) {
        return 403;
        # 或者可以重定向到其他页面
        # return 301 http://example.com/blocked.html;
    }

    # 其他正常配置...
}

方法二:使用map指令(更高效)

map $http_user_agent $bad_bot {
    default 0;
    ~*(wget|curl|scrapy|python-requests|python-urllib|java|httpclient|go-http-client|php|ruby|perl|nikto|sqlmap|nmap) 1;
    ~*(bot|spider|crawler|slurp|mediapartners-google) 1;
}

server {
    listen 80;
    server_name example.com;

    if ($bad_bot) {
        return 403;
    }

    # 其他正常配置...
}

方法三:单独配置文件

  1. 创建/etc/nginx/bots.d/blockbots.conf文件:
# 恶意爬虫和扫描器
if ($http_user_agent ~* (wget|curl|libwww-perl|python|nikto|sqlmap|nmap|nessus|openvas|metasploit|hydra)) {
    return 403;
}

# 搜索引擎爬虫(可根据需要放行)
if ($http_user_agent ~* (bot|spider|crawler|slurp|mediapartners-google|bingbot|baiduspider|yandexbot)) {
    return 403;
}

# 空User-Agent
if ($http_user_agent ~ ^$) {
    return 403;
}
  1. 在nginx配置中include这个文件:
http {
    include /etc/nginx/bots.d/blockbots.conf;
    # 其他配置...
}

方法四:使用Nginx的limit_req模块限制请求频率

http {
    limit_req_zone $binary_remote_addr zone=bot_zone:10m rate=10r/s;

    server {
        location / {
            limit_req zone=bot_zone burst=20 nodelay;
            # 其他配置...
        }
    }
}

注意事项

  1. 配置完成后记得测试并重载Nginx:

    nginx -t && nginx -s reload
    
  2. 过度严格的User-Agent过滤可能会影响合法的爬虫(如搜索引擎爬虫),请根据实际需求调整。

  3. 更复杂的爬虫防护可以考虑使用Nginx+Lua或专门的WAF解决方案。

  4. 定期更新爬虫User-Agent列表,因为新的爬虫工具会不断出现。

  5. 可以结合日志分析来识别和添加新的恶意爬虫User-Agent。