来自元外部代理的流量过多

问题描述 投票:0回答:1

我们的一个生产 magento 2.4.5 网站经常出现宕机问题,我们详细检查了该案例,我们可以看到我们从元外部代理收到了过多的爬虫请求。 请参阅下面的示例日志条目。

57.141.0.9 - - [xx/Dec/2024:12:xx:09 +0530] "GET /our-xxxxxxxxxs/ms-xxx?karat=23&size=6%2C7%2C13%2C16%2C17%2C18%2C24 HTTP/1.1" 200 780515 "-" "meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler

进一步检查时,我可以从日志中看到我们在 12 小时内收到了来自“meta-externalagent/1.1”的“64941”请求。

我可以看到很多人都面临类似的问题,但没有提到 magento 2.4.5 版本的明确解决方案。

来自 facebookexternalhit bot 的流量过多

https://developers.facebook.com/community/threads/992798532416685/

我们是否可以对元爬虫进行一些速率限制?由于我们正在做Facebook广告,所以我们无法完全阻止来自元外部代理的请求。

目前我已经在 nginx 中使用 7G 防火墙阻止了元外部代理。

facebook nginx bots magento2 meta
1个回答
0
投票

您可以使用 nginx 内置的速率限制功能来限制此机器人的速率。根据 “Meta Web Crawlers” Facebook 文章,该机器人的

User-Agent
HTTP 标头可以是

meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)

meta-externalagent/1.1

但是,由于本文可能不会列出所有可能的

User-Agent
值,因此您应该检查 nginx 访问日志以确定。

要限制来自此机器人的请求,您可以将以下代码段添加到您的 nginx 配置中:

map $http_user_agent $meta_crawler {
    "meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)"  1;
    "meta-externalagent/1.1"                                                                     1;
}
# Limit meta crawler to 30 requests per minute; adjust according to your needs
limit_req_zone $meta_crawler zone=meta:10m rate=30r/m;

server {
    # your magento server section
    limit_req zone=meta burst=5 nodelay;
    limit_req_status 429;
    ... # the rest of your nginx configuration
}

建议在 HTTP 429 响应中包含

Retry-After
HTTP 标头;您可以按如下方式进行:

server {
    limit_req zone=meta burst=5 nodelay;
    limit_req_status 429;
    error_page 429 @err429;
    location @err429 {
        add_header Retry-After 30 always;
        return 429;
    }
    ... # the rest of your nginx configuration
}

虽然您可以在

map
块中使用正则表达式,例如:

map $http_user_agent $meta_crawler {
    "~^meta-externalagent/"  1;
}

出于性能考虑,我不建议这样做(有关详细信息,请阅读this nginx 支持论坛帖子)。

© www.soinside.com 2019 - 2024. All rights reserved.