自开始启用多说评论插件以来,各方面还是比较满意的,只是偶尔会出现评论框无法加载的问题,好在还能忍。但最近有了想换到搜狐畅言或者自带评论框的想法,原因是垃圾评论太多了,多说后台的过滤和黑名单机制根据没有任何作用,情况跟苏格博客如何将多说评论转回到typecho本地数据库说的差不多,几个spam团队打着免费分享的幌子,还有宣传某种少儿不宜的网站的,轮流变着法儿的灌评论,防不胜防。
由于这两类spam都是游客身份的留言,初步来看,应该是用工具直接POST提交的评论。反制这一类spam的方法,一是打开游客留言的评论审核,二是直接关闭游客留言。对于登录了社交账号的垃圾留言,就只有依赖多说的反垃圾策略的更新了。但目前来看,多说貌似停止了更新,看到官方社区的反馈貌似也没人理会,于是才有了上面的想法。
多说有个最大的优点,就是同步功能,除了主动双向同步外,也能通过反向同步接口实时的把评论数据回写到本地数据库,但是今天偶然发现,同步功能居然不能用了,作为一个博客,除了本身的文章外,最大的价值都是大家的留言,如果不能回到本地,那就意味着哪天多说不行了,大家的评论也就全都没有了,那还能忍,于是在插件设置上先手动同步测试一下,返回504 Gateway Time-out(tengine)错误,手动测试方向同步的API接口,发现可以正常返回评论数据,排除了多说API接口的问题。504 Gateway Time-out是网关超时,tengine淘宝根据nginx源码改造的web服务器开源系统,我并没有用这个系统,但用了阿里云的CDN,估计是阿里云CDN用的tengine系统。
当然这不是重点,504错误又是请求同步的操作,因此推测是php脚本超时的原因,在多说评论插件的duoshuo.api.php文件中,找到两个与此有关的函数,$ajax->open('GET', $url);$ajax->send();发送请求给多说API获取评论数据,检查open和send两个函数,发现并无问题,怀疑是curl模块本身的问题,于是在该文件的216行注释$json = json_decode($ajax->responseText);并增加增加两行代码$pinglun = file_get_contents($url); $json = json_decode($pinglun);发现居然OK了,问题是解决了,但检测curl模块也并无问题啊,这不科学。先不管这么多,又想到可能和php-fpm缓存设置有关,在duoshuo.api.php文件第208行,请求的URL中评论数量参数默认是imit=50,我改成30,发现居然也OK了,那么,基本可以断定的php-fpm缓存问题了,一次请求50条评论卡死了php-cgi处理进程,所以返回504错误。