wecenter半伪静态思路
最近针对wecenter的攻击越来越多了。这是个好事,这说明我们坚守的wecenter越来越出名了。
那作为wecenter的死忠+野生技术宅。我希望如下思路能给各位大佬带来一些灵感。 更希望有大佬能把这个思路做成插件(我不太擅长做插件)。
攻击网站。出了DDOS攻击之外。最多的就是CC攻击了。
CC攻击主要的手段就是消耗数据库链接。 比如并发大让数据库CPU暴增。 或者恶意使用搜索功能这类容易造成慢SQL(执行返回结果慢)来消耗数据库可用链接数。
所以我们需要改善SQL性能损耗。
改善性能损耗一般来说就是利用内存缓存,或者文件静态化。
内存缓存一般对服务器内存比较高,这个我们这篇不讲。
我们讲文件静态化。
文件静态化,顾名思义就是将用户访问时的渲染好的页面保存成一个静态的文件。
比如用户访问 http://www.sanshu.cn/a/72189.html 时 程序在article/main.php的文章渲染时,将渲染好的内容保存到 网站目录的 a目录下的72189.html里。
反正用户访问这篇文章的时候,重点关注的内容每次打开都一样。最多就是访问数会不一样(这并不是重点)。
纯静态化的方法 我之前有写过文章:
https://wenda.wecenter.com/article/1707
这种方法能极大的缓解数据库的压力,提升网页打开速度。但是带来的就是网站访问数量不更新。所以纵使三叔的博客访问量日益上涨,但是首页显示文章数还是寥寥无几,不过三叔也不在乎这些啦。
所以,在后来的代码里(没在三叔博客上使用)我换了代码。
文章页 也就是 /app/article/main.php里追加了一个代码:
private function get_temp_path($id){
$filepath = '/articletemp/'.id.'.htm';
return $filepath;
}
function use_cache(){
return 'Y';
}
然后在index_action方法的开始位置加入:
$this->model('article')->update_views($article_info['id']);
if($this->use_cache()==='Y'){
$tmp_path = $this->get_temp_path($id);
if(file_exists($tmp_path)){
die(file_get_contents($tmp_path));
}
}
找到这个方法里原来的
$this->model('article')->update_views($article_info['id']);
然后删掉。因为前面有过了。
然后在访问的最后找到
TPL::output('article/index');
改成
$content = TPL::output('article/index',false);
if($this->use_cache()==='Y'){
createHtmlFile($this->get_temp_path($article_info['id']),$content);
}
createHtmlFile 的方法 见 静态化文章里。
这样就可以做到每次访问文章的时候会更新文章访问数量。这样首页展示的时候,文章访问量会变。
如果文章有什么不足之处,希望大佬给出建议。多谢。
暂无评论