经过了前面一段时间的探索,我们对Apache和MySql的性能调优有了个初步的认识,我本来以为问题到这里应该就解决了,但是运行了十几天后,还是出现了负载达到50+的情况。于是,网站又挂了。
分析access.log与之前并无不同,被盗链的请求还是很多,不过这些都被302重定向了啊,死活想不到办法,一度怀疑是不是因为302或者404的错误日志过多的引起的IO问题导致服务器资源紧张。
除此之外,还是有个现象引起了注意,每次挂掉的不是Apache,而是数据库。为什么盗链会引起数据库问题,这显然无法解释。
不绕圈子了,最后发现的问题,就是为了防盗链而特意写的Rewrite。原本的rewrite是这样的,对于盗链的资源,重定向到首页。
这看起来没有问题,可是瞬间请求数百次到首页,然后运行脚本,执行数据库查询……
还有一点,返回的是302,这就意味着搜索引擎和下载工具会认为资源是存在的,不会停止响应。
所以,最终的解决方案。重定向所有盗链的资源到一个静态LOGO,同时,设定返回Code为403.
整个世界清净了。
After the day