从八月后,我的站点评论功能失效了,也一直忙都没怎么关注,最近仔细看了一下这个问题,居然查出几个问题。
Tornado4 xsrftoken
Tornado一推出4版本我就立即升级了,因为pip做的就像npm一样太容易了,一条命令就搞定,你不需要手动下载然后解压再python setup.py
安装。感觉在升级Tornado后评论就没了,因为一连几个月都没有收到评论邮件。于是最近才抽空测试了一下,终于发现问题了,因为我的站点开启xsrftoken,而提交的时候居然提示我xsrftoken不匹配。然而其它API是正常的,仔细看了一下,留言页面生成的xsrftoken也是每次刷新页面都随机生成的,这就奇怪了。
官网也没有看出什么信息,网上也没搜索出答案,然而我一直认为可能是Tornado的问题,因为没升级之前是好的,升级之后就不能用了。但既然提示我xsrftoken不匹配那也应该是所有API啊,为什么是就偏偏就留言提交的API有问题呢?于是在仔细对比后,终于发现了问题,我在留言提交的时候把xsrftoken encodeURIComponent了一下,其它接口没有encodeURIComponent。顺着这条线索追到服务器,发现服务器再做token比对的时候,居然发现新版本的Tornado没有像老版本一样先decode再比对,而是直接就验证了,因为它生成的xsrftoken有“|”符号,于是原版token可能是这样:
2|f06e9679|f6f6bc1653f71dbbe5d9251cd81be2f1|1417315300
encodeURIComponent后
2%7Cf06e9679%7Cf6f6bc1653f71dbbe5d9251cd81be2f1%7C1417315300
两个当做字符串对比自然等于false,于是就服务器就会响应403,然后控制台告诉你不匹配。后来一想,其实我要是去看log可能就很快定位问题了,可惜当然为了省事只在Nginx打印log,没有在supervisor打印log。
gravatar头像不能获取
博客的头像来自gravatar全球头像地址,然而有好长一段时间发现基本不能访问了,于是网上看了一下有此通病的站长都传言gravatar被墙了。。。不明白为何被墙,但问题来了总得解决,于是发现gravatar还有另外一条通道可以用,也就是目前用的链接地址,格式如:
https://secure.gravatar.com/avatar/youremail
如果有遇到这个问题的童鞋可以试一试改成这个URL,当然,如果哪天这个URL也被墙了,那就得另谋出路了。
supervisor不能kill
程序重新部署到服务器,因为我的Python进程使用supervisor守护,所以得重启supervisord才能生效。像往常一样重启supervisord,然后执行了kill命令在执行supervisord启动命令后发现程序没有更新,问题依旧,检查了程序后确认程序已经是最新上传的。那么问题就是supervisord没有重启成功?于是我再把supervisord进程杀死后,这次我先不着急启动,ps -aux
里已经没有supervisord进程了,然而更神奇的事情发生了,我的小站居然还能正常访问。。。。
这太奇怪了,我以为我眼花了,确认supervisord没有进程后,我的小站却一直还能访问。supervisorctl reload | stop | start
均提示
unlink: cannot unlink '/tmp/supervisor.sock': No such file or directory
这下,彻底无招了,于是到网上搜索答案,发现这居然是supervisord 3.0rc的一个bug,而我恰恰就是这个版本的。。。。试了一通都没有成功把supervisord升级到目前3.13还是不行。于是只好重启机器
rc版本可不能随便用在生产环境啊~~~~~