欢迎光临好主题官网!致力于 WordPress 企业主题定制开发及 WP外贸模板下载。

从一次 TranslatePress 高并发 Ajax 问题排查,聊聊 WordPress 爬虫治理与性能优化

文章目录

前言

某外贸 WordPress 网站上线 TranslatePress
多语言插件后,服务器日志中持续出现大量:

/wp-content/plugins/translatepress-multilingual/includes/trp-ajax.php

请求。

虽然网站能够正常访问,但:

  • Ajax 请求数量巨大
  • 搜索引擎蜘蛛不断触发动态翻译
  • PHP 持续处理 Ajax
  • CPU 与 MySQL 负载升高

本文以 example.com 为示例,记录完整排查过程。

问题现象

日志中可以看到大量 POST:

POST /wp-content/plugins/translatepress-multilingual/includes/trp-ajax.php

同时还能发现:

  • Baiduspider
  • Baiduspider-render
  • Bytespider

不断访问各种语言页面。

TranslatePress 在前端需要通过 Ajax
获取动态字符串翻译,因此蜘蛛也会触发该接口。

第一步:分析日志

实时查看:

tail -f /www/wwwlogs/example.com.log

过滤蜘蛛:

tail -f /www/wwwlogs/example.com.log | grep -Ei "Baiduspider|Bytespider"

过滤 Ajax:

tail -f /www/wwwlogs/example.com.log | grep trp-ajax.php

同时查看状态码:

grep "trp-ajax.php" access.log | awk '{print $9}' | sort | uniq -c

这些命令能够快速判断是否存在异常访问。

第二步:尝试 Nginx 拦截

最开始考虑直接在 Nginx 拦截:

location = /wp-content/plugins/translatepress-multilingual/includes/trp-ajax.php {
    if ($http_user_agent ~* "Baiduspider") {
        return 403;
    }
}

过程中遇到了:

  • include 路径问题
  • fastcgi 配置问题
  • php upstream 配置问题

虽然最终能够正常运行,但后续维护复杂,而且插件升级后仍可能发生变化。

因此没有作为最终方案。

第三步:阅读插件源码

阅读 TRP_Ajax 可以发现:

构造函数一开始便直接验证:

  • action
  • originals
  • language

随后立即:

  • 读取 wp-config.php
  • 建立 MySQL 连接
  • 查询翻译表
  • 输出 JSON

整个文件完全绕过 WordPress Hook。

因此:

  • 没有 action
  • 没有 filter
  • 没有 do_action

意味着:

几乎没有可以利用的扩展点。

第四步:WordPress 层拦截蜘蛛

既然插件无法扩展,那么就在 WordPress 最前面终止请求。

add_action('init', function () {

    if (empty($_SERVER['HTTP_USER_AGENT'])) {
        return;
    }

    $ua = $_SERVER['HTTP_USER_AGENT'];

    foreach ([
        'Baiduspider',
        'Baiduspider-render',
        'Bytespider'
    ] as $bot) {

        if (stripos($ua, $bot) !== false) {
            status_header(403);
            exit('403 Forbidden');
        }
    }

});

这样蜘蛛进入 WordPress 后立即结束,不再执行后续逻辑。

第五步:robots.txt

对于纯外贸网站,如果不需要百度收录,可直接禁止:

User-agent: Baiduspider
Disallow: /

User-agent: Baiduspider-render
Disallow: /

User-agent: Bytespider
Disallow: /

robots 属于礼貌协议,真正的拦截仍建议配合 403。

验证结果

再次观察日志:

GET ... 403
POST admin-ajax.php 403
POST trp-ajax.php 403

说明:

  • 百度蜘蛛已无法抓取页面
  • Render Spider 无法执行 JS
  • Ajax 请求被终止
  • TranslatePress 不再为百度执行动态翻译

普通用户浏览网站完全不受影响。

为什么选择这种方案

对于面向 Google、Bing 等国际搜索引擎的外贸网站而言:

  • 百度几乎不会带来有效询盘
  • Render Spider 会增加服务器压力
  • TranslatePress Ajax 属于动态计算
  • 阻止百度收益明显大于成本

因此:

robots.txt + functions.php
的组合,是成本最低、维护最简单、效果稳定的方案。

最佳实践

建议按优先级:

  1. robots.txt 告知蜘蛛不要抓取
  2. functions.php 返回 403
  3. 定期查看访问日志
  4. 监控 Ajax 请求数量
  5. 保持 TranslatePress 更新

FAQ

为什么 robots.txt 不够?

因为蜘蛛可能忽略 robots,403 才是真正阻止访问。

为什么不用 Nginx?

可以使用,但配置复杂、迁移成本高。对于多数 WordPress 项目,PHP
层维护更方便。

会影响 Google 吗?

不会,只拦截指定 User-Agent。

总结

本次优化最大的收获不是写出几行配置,而是建立了完整的排查思路:

  • 先分析日志
  • 再定位来源
  • 阅读插件源码
  • 验证是否存在 Hook
  • 对比 Nginx 与 WordPress 两种实现
  • 选择维护成本最低的方案

很多性能问题并不需要复杂架构,只要理解请求链路,往往就能找到简单而稳定的解决方式。

本文由 好主题 原创整理,致力于分享实用的 WordPress 建站知识与主题开发经验。 我们专注于提供高质量的 WordPress企业主题 资源,帮助中小企业轻松构建专业网站。 转载请注明来源,并保留原文链接,感谢您的支持与理解。

联系我们

教程看不懂?联系我们免费为您解答!免费助力个人,小企站点!

客服微信
相关文章
主题推荐
还没有账号?

会员注册

成为会员,获得更多专属优惠!

验证码: 加载中... =

已有账号?