作者:一位被429逼成段子手的站长
话说那天,我正端着泡面,打算把刚写好的《如何优雅地拒绝老板加班》发到站点。鼠标一点,“啪”——屏幕上跳出四个数字:429。我愣了三秒,以为眼花了,再刷,还是429。服务器仿佛在云端朝我拱手:“兄台,手下留情,鄙机已累成狗。”
我当场把泡面放下,跟它理论:“你一台机器,怎么比我还娇气?”服务器不吭声,只把429挂得更高,像门神。好吧,既然它要学姜太公钓鱼,我就讲讲这场“429惊魂”的始末,博诸君一笑,也省得大家将来跟我一样,端着泡面对着屏幕发呆。
429,全名HTTP 429 Too Many Requests,翻译成大白话就是:你点得太快,我反应不过来。就像你去楼下小卖部,一分钟买十次辣条,老板也会掀桌:“兄弟,你搁这儿进货呢?”服务器同理,它也有脾气,只是脾气用数字表达。
我复盘了一下,当天一共干了三件“蠢事”:
开了自动保存插件,每敲一个字就“叮”一下往服务器戳;
顺手点了“后台同时检查更新”,插件、主题、核心三连击;
最绝的是,我还用爬虫插件,打算把隔壁站点的“猫片”全扒下来当配图。结果隔壁站点没咋地,我自己先被429拍在沙滩上。
服务器当场翻白眼:“你把我当千手观音?”于是它启动自卫程序,先把我IP请进小黑屋,限时冷却。就像打麻将连胡十把,牌友集体要求暂停,让你去楼道冷静。
那怎么办?我端着已经坨掉的泡面,开始了“429求饶三步曲”:
第一步,认怂。关掉自动保存、暂停爬虫、把更新检查改回“每周一次”,再把插件名字里带“auto”的都揪出来审问一遍。服务器脸色稍缓,从小黑屋门缝里递出一张纸条:限速规则已更新,下次再犯,关你三天。
第二步,洗澡。不是给我洗,是给服务器洗。打开缓存插件,把页面统统做成“快照”,访客看到的是照片,不是实时演算。服务器顿时觉得肩上的担子轻了,风扇声都从“直升机”降到“小电驴”。
第三步,分身。我咬咬牙上了CDN,相当于给服务器请了一堆替身。访客来了,先找替身签名合影,真身躲在后台喝茶。429从此只在替身那儿出现,真身再没冲我翻白眼。
三招完毕,我重新端起另一碗泡面,点击发布——页面“嗖”地弹开,像服务员终于掀开蒸笼,热腾腾。我长出一口气,对着屏幕拱手:“多谢不杀之恩。”服务器没回话,但我仿佛听见它在云端轻笑:“下次轻点戳,键盘也是肉长的。”
诸位若也遇到429,别急着摔键盘,先想想你是不是把服务器当成永动机。机器虽无感情,却有极限;给它留口气,它才能给你留面子。毕竟,泡面可以坨,网站不能瘫啊!
——段子手站长 敬上
【429排雷全攻略:手把手教你把服务器哄开心】
一、先弄清429是谁报的警
打开浏览器按F12 → Network → 找到红色429请求 → 看Response Header里的“Retry-After”字段,它告诉你“冷静多久”。
如果Header里出现“X-RateLimit-*”字样,多半是主机商或CDN的限速,不是WordPress本身。
二、WordPress内部“限速器”大扫除
关闭或调低“心跳控制(Heartbeat)”
• 安装插件“Heartbeat Control”,把频率从默认15秒改成60秒或禁用前台心跳。
减少自动任务
• 在wp-config.php里加:
define('WP_CRON_LOCK_TIMEOUT', 120); // 任务间隔从60秒提到120秒
define('DISABLE_WP_CRON', true); // 彻底关掉内置伪定时器,改用系统真定时器
• 再到宝塔或cPanel里加一条真实cron,每10分钟访问一次 https://你的域名/wp-cron.php?doing_wp_cron。
插件“人口普查”
• 进/wp-content/plugins/,把最近更新过、名字带“auto、sync、checker”的插件先改名禁用,逐一排查元凶。
三、服务器级限速:主机商、CDN、防火墙
共享主机
• 登录cPanel → “CPU and Concurrent Connection Usage”看峰值,若常飙红,升级套餐或换主机。
VPS/云服务器
• Nginx:在/etc/nginx/conf.d/rate.conf加
limit_req_zone $binary_remote_addr zone=wp:10m rate=10r/s;
limit_req zone=wp burst=20 nodelay;
然后nginx -s reload。
• Apache:在.htaccess加
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 100
CDN限速
• Cloudflare:Speed → Optimization → 把“Polish”和“Rocket Loader”先关掉;Firewall → Tools → 把“Security Level”从High改Medium。
• 又拍云、七牛同理,把“CC防护”阈值调高或加白名单。
四、缓存=给服务器戴“降噪耳机”
页面缓存:装WP Super Cache或WP Rocket,一键生成HTML静态页。
数据库缓存:在wp-config.php里开
define('WP_CACHE', true); 对象缓存:Redis/Memcached,宝塔一键装,再把插件“Redis Object Cache”打开。
五、终极杀招:拆分业务
媒体库搬到OSS/S3,让图片、视频不再经过Web服务器。
搜索用Algolia或Elasticsearch,别让MySQL一边写文章一边跑全文检索马拉松。
六、验证是否修好
浏览器无痕模式连续刷20次页面,没再出现429。
用curl跑压测:
for i in {1..50}; do curl -I https://你的域名; done 全返回200/301,即成功。
七、彩蛋:临时“急救按钮”
若十万火急,先让服务器“失忆”:
// wp-config.php
$_SERVER【'REMOTE_ADDR'】 = '127.0.0.1'; // 仅本地调试用,线上慎用
这招相当于给自己发VIP通行证,但别忘了事后删除,否则隔壁老王也会溜进来。
按以上七步走,99%的429都会变成200,剩下的1%?多半是老板又让你装十个新插件——那就再端一碗泡面,从头开始哄服务器吧。