最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 记录一次网站首页被刷量的经历,对网站页面静态化处理的思考和尝试

    正文概述 转载于:掘金(王中阳Go)   2021-03-26   794

    还原故事背景

    有一个N多年前的老项目,接到了服务器的报警短信,带宽和CPU都超过了80%。紧接着网站打开特别慢,然后挂掉了, 第一反应就是被刷量了!

    定位问题

    1. 首先查询统计平台,发现同时在线人数为0,感觉很奇怪。马上想到因为网站已经挂掉了,无法执行到统计js,所以真实的在线人数并不为0
    2. 马上查询Nginx的log
    tail -f /data/logs/nginx/access.log  
    
    1. 在查询access.log的时候发现几个接口以肉眼可见的速度疯狂滚屏,问题就在这里了。
    2. 分析日志,发现这些接口的请求竟然是自己的机器,说明攻击者不是在curl接口,而是在刷页面
    3. 定位到基本都是不同的ip,封禁ip不是解决办法
    4. 那就优化被刷的页面吧,定位到刷的是首页,查询了网站首页代码,发现首页的请求异常的多,项目比较老,使用的php框架yaf+smarty渲染的,且部分接口已经做了数据缓存,但是机器还是经不起这么疯狂的查询。(这是一个小项目,单机部署,包括:web服务+MySQL+MongoDB)
    5. 灵机一动,把“首页静态化处理”吧
    6. 静态化处理核心思路见代码注释,非常简单,但是非常高效
    核心思路如下:
    /**
     * 生成静态首页
     * 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点

    1. 之前的首页实在是太浪费性能,非常差
    2. 并发量并没有那么高,否则静态化处理之后也没法解决问题。

    起源地下载网 » 记录一次网站首页被刷量的经历,对网站页面静态化处理的思考和尝试

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元