You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

来自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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:58:32