云服务器被CC攻击了怎么办?手把手教你几招实用防御
凌晨两点手机告警响个不停,CPU跑满100%,网站打开一直在转圈,SSH都难登进去。好不容易爬上去看一眼 nginx 日志,好家伙,同一个IP段每秒几百个请求,全在刷搜索页……遇到这种情况,大概率是被人用CC刷了。CC不像DDoS那样靠带宽把你打趴下,它是“用正常请求干死你”,成本极低、隐蔽性强,几十块钱的代理池就能折腾你一整天。这篇写给国内站长、个人开发者和中小企业运维:不堆术语,直接给能落地的步骤,从判断、应急到长期方案一次讲清。
先搞清楚:CC和DDoS不是一回事
打个比方,DDoS是几十个人堵在你店门口,路都走不动(带宽、连接数被打满);CC则是几十个人假装成顾客进门,每人都只点最慢的那道菜,后厨直接累瘫(消耗应用层资源)。所以你光看带宽没满、CPU却炸了,八成就是CC。
第1步:先确认是不是CC,别瞎忙活
先看负载:top 或 htop,重点看 nginx、php-fpm、mysql 是不是吃满了。再看日志来源:
tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20
典型的CC特征:单个IP高频请求、UA是 python-requests 或者干脆空着、只刷动态页和搜索页、referer为空。这里提醒一句:封之前先反查一下IP,别把百度蜘蛛、Googlebot 这些正常爬虫顺手封了,SEO掉了哭都来不及。
第2步:Nginx 限速限连,先应急
这招免费、立刻生效,改完 reload 就行:
# http 块
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
# server 块
limit_req zone=one burst=20 nodelay;
limit_conn addr 10;
limit_req_status 429;
搜索页、登录页这些重灾区单独加严:
location ~ ^/(search|login) {
limit_req zone=one burst=5 nodelay;
}
再配合防火墙把确认的恶意IP段直接 drop 掉,先撑过这波。
第3步:把源站IP藏起来(最关键的一步)
攻击者能持续打你,是因为他知道你服务器IP。这一步必须处理干净:上CDN或者高防IP,让流量先过清洗节点。别问我是怎么知道的——很多人换了CDN还是被打穿,原因就是源站IP在历史DNS记录、子域名解析、甚至邮件头里还留着,攻击者直接绕过CDN打源站。藏IP要藏彻底,必要时候连服务器IP都换掉。
第4步:人机验证,让机器请求“变贵”
在WAF里开JS挑战、5秒盾、滑块验证,正常浏览器一秒过,脚本直接卡死。同时把静态资源全部丢给CDN缓存,别让源站扛图片和CSS。动态接口加频率限制加签名校验,能挡掉一大半低级脚本。
第5步:扛不住就别用爱发电
自己折腾一周不如直接上一台带清洗能力的高防云服务器。选的时候重点看三样:防御峰值(50G还是200G)、CC清洗策略(是不是按QPS限速)、线路质量(BGP/CN2决定国内访问快不快)。
避坑提醒:新手最容易犯的3个错
- 第一反应是升级配置。加CPU加内存加带宽,CC打的是应用层,你加到8核16G照样被打满,钱花了攻击一点没少。别上来就加配置,先看日志。
- 乱封IP段或UA。一封就是整个C段,或者见着UA带“bot”就封,结果把搜索引擎和正常用户一起送走。封之前先确认请求特征。
- 以为上了CDN就万事大吉。源站IP没藏干净,等于穿了防弹衣但把心脏露在外面。
解决方案推荐
说实话,如果你不想天天跟攻击者斗智斗勇,直接上带高防的云服务器最省心。沐雨云服务器(https://www.myyvps.com)单机自带 50-200G DDoS/CC 防御,攻击来了自动清洗,不用你改一行配置;另外提供香港/美国/日本免备案VPS,走 BGP/CN2 优质线路,纯SSD固态硬盘,2核2G轻量云 12.8元/月起,支持支付宝/微信付款。个人博客、电商站、游戏服、外贸独立站都能用,先买台低配试水也不亏。
总结回顾
- 先判断再动手:看CPU负载 + nginx日志,别盲目升级配置
- Nginx 的
limit_req/limit_conn是免费应急方案 - 藏源站是关键,CDN或高防IP二选一,IP要藏彻底
- 人机验证让机器请求变贵,静态资源走缓存
- 真扛不住就上高防云服务器,省心比省钱重要
- 牢记三条:别乱加配置、别乱封IP、别让源站裸奔




这一切,似未曾拥有