有一个N多年前的老项目,接到了服务器的报警短信,带宽和CPU都超过了80%。紧接着网站打开特别慢,然后挂掉了,
第一反应就是被刷量了!
tail -f /data/logs/nginx/access.log
核心思路如下:
/**
* 生成静态首页
* 1 静态首页从缓存中取
* 2 动态首页另写一个路由,保证有实时首页可供访问
* 3 考虑到curl网站可以直接获得包括html标签的string字符串,我就直接curl了
* 4 考虑到从Redis读取数据性能比较快,且操作方便,就不把页面保存成HTML文件了
* 5 Redis中有数据就直接获得,没有数据就curl获得html dom字符串存储到Redis中
* 5 把html直接echo输出
*/
public function indexAction()
{
$cacheKey = 'statichtml_staticIndex';
$result = Service_CacheModel::get($cacheKey);
if (empty($result)) {
//这是动态页面,这个页面的数据都是请求数据动态生成的
$url = "https://www.xxxxx.com.cn/index/dynamic/";
$result = Request::curl($url);
Service_CacheModel::set($cacheKey, $result, 60*10); //10分钟
}
echo $result;
}

静态处理之后首页的访问速度仅为33毫秒,之前要1秒左右,性能提升了30倍+
我能通过上述解决思路解决问题只能说明3点
上述不是解决刷量攻击的根本办法,但却是优化性能,提高网站访问速度的一种解决思路