来自Mediapartners-Google的垃圾请求致网站宕机求助
解决Mediapartners-Google爬虫恶意请求导致服务器负载过高的问题
我之前也碰到过类似的异常爬虫请求问题,结合你的Ubuntu+Nginx+Apache+PHP环境,给你几个实用的解决思路,按优先级排序:
1. 先确认请求是否为伪造的Google爬虫
真实的Mediapartners-Google是Google的广告关联爬虫,正常不会高频请求不存在的页面。你可以先验证请求IP的合法性:
# 反向解析IP,查看是否属于Google官方域名 host 72.14.199.26 # 或者用dig命令 dig -x 72.14.199.26
如果反向解析结果不是*.googlebot.com或*.google.com,那100%是伪造的恶意请求,可以直接封禁。
2. 用Nginx快速拦截恶意请求(推荐)
因为Nginx在前端,拦截效率比Apache高很多,直接在你的Nginx server配置块中添加规则:
方案A:直接封禁伪造的UA
如果确认是伪造的Mediapartners-Google请求,直接返回444(关闭连接,节省资源):
if ($http_user_agent = "Mediapartners-Google") { return 444; }
方案B:仅封禁非Google官方IP的该UA请求
如果担心误封真实爬虫,可以添加IP验证逻辑:
# 先标记UA为Mediapartners-Google的请求 if ($http_user_agent ~* "Mediapartners-Google") { set $block_candidate 1; } # 验证IP是否属于Google(反向解析匹配googlebot.com) resolver 8.8.8.8 valid=300s; if ($block_candidate = 1) { set $reverse_host ""; set $reverse_ip $remote_addr; proxy_pass http://$reverse_ip/googlebot.com; proxy_set_header Host googlebot.com; proxy_connect_timeout 1s; error_page 404 500 502 503 504 = @block_malicious; } location @block_malicious { return 444; }
3. 用iptables封禁恶意IP段
如果这些请求集中来自某个IP段(比如你日志里的72.14.x.x),直接用防火墙封禁:
# 封禁72.14.0.0/16整个段 sudo iptables -A INPUT -s 72.14.0.0/16 -j DROP # 保存iptables规则(Ubuntu下) sudo iptables-save > /etc/iptables/rules.v4
4. 在Apache层补充拦截(如果Nginx仅做反向代理)
如果你的Nginx只是转发请求到Apache,可以在Apache的配置文件或.htaccess中添加规则:
用mod_rewrite拒绝UA
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^Mediapartners-Google [NC] RewriteRule ^ - [F,L]
用mod_access封禁
BrowserMatchNoCase Mediapartners-Google bad_bot Order Allow,Deny Allow from all Deny from env=bad_bot
5. 全局限制请求频率,防止负载过高
不管是不是爬虫,给服务器加请求频率限制,用Nginx的limit_req模块:
先在Nginx的http块中定义限流区域:
http { # 定义名为one的限流区域,存储10分钟的请求记录,速率限制为每秒1次 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; }
然后在server块中应用:
location / { # 允许突发2个请求,超过直接拒绝 limit_req zone=one burst=2 nodelay; }
6. 优化404请求处理,减少后端负载
让Nginx直接返回静态404页面,不用转发到Apache/PHP:
location / { try_files $uri $uri/ =404; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; # 替换成你的静态文件目录 internal; }
建议先从验证IP合法性开始,再结合Nginx拦截和限流,这样能快速降低服务器负载,避免宕机。
内容的提问来源于stack exchange,提问作者James Malvi
相关产品推荐
相关产品推荐

