FeedBurner不认我的Feed了
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/319)的形式标明文章原始出处和作者信息及本声明。突然发现,我最近写的几篇文章都没有被rss阅读器收录,以致于我也无法用email转发到其他镜像上去,本来以为是FeedBurner等网站访问国内受阻,今天无意中使用FeedValidator检查才发现,无法访问我的feed!同时,GoogleReader也无法访问,看来真的是出问题了。
FeedBurner的错误提示为:
There is an issue that must be addressed with your source feed for the feed "Fwolf's Blog"
Read timed out
FeedValidator和W3C的feed检查工具(似乎W3C使用的是FeedValidator的开源程序,可以在这里下载,同时在sf.net上也登记了,不过没在上面发布文件),都会返回超时错误:
Server returned timed out
偶尔还会返回更离谱的错误信息:
Server returned (104, 'Connection reset by peer')
让我有一种自己的网站被封锁了的感觉(封锁是双向的,出国访问和从国外访问国内都受影响)。
GoogleReader的错误提示:
No feed available for "http://www.fwolf.com/blog/feed"
开始查找错误的原因,首先看看是不是被封锁了的原因,使用匿名web代理http://anonymouse.org/anonwww.html能够访问,从DreamHost主机上wget也能成功,排除被封锁了的可能。本来我写的内容也不应该会被封锁嘛,那是不是FeedBurner服务器的问题呢?有这个可能,但我没法实验去。
分别把Akismet、Spam Karma 2等反spam插件停止,问题依旧,说明不是被anti spam程序阻止的问题。
是不是WordPress的问题呢?记得WP 2.0.6曾经和FeedBurner有过冲突,参见:
- WordPress 2.0.6: Feedburner issue, and fix
- WordPress 2.0.6 中的 Feedburner bug
- 升级 Wordpress 2.0.5 到 2.0.6 的步骤
- WordPress 2.0.6 Feedburner Bug 及修复
不过我现在用的版本是2.1.1,应该没有上述问题,不过还是排除一下的好,把WP升级到了最新的2.1.3版本,问题依旧,初步排除WP自身的问题。
是不是升级之后,.htaccess简化网址的配置文件出问题了?但是我分别用FeedValidator和FeedBurner检查RSS Feed的直接网址http://www.fwolf.com/blog/wp-rss2.php,依然都是超时错误,排除。
是不是php执行出了什么错误了呢?在php的errorlog文件中我发现了:
[04-May-2007 19:45:27] PHP Fatal error: Maximum execution time of 90 seconds exceeded in D:\fwolf\wordpress\wp-content\plugins\markdown.php on line 1761
不过我直接用浏览器访问我的Feed是可以的,应该也不是php的问题,不然我的blog应该整个显示不正常才对。
继续探索,发现了更离奇的事情,在apache的access.log中我发现如下记录:
66.150.96.109 - - [04/May/2007:20:12:13 +0800] “GET /blog/feed/ HTTP/1.1″ 200 24315 “-” “FeedBurner/1.0 (http://www.FeedBurner.com)”
208.97.167.25 - - [04/May/2007:20:14:14 +0800] “GET /blog/feed HTTP/1.0″ 200 86896 “-” “Wget/1.9.1″
67.19.173.84 - - [04/May/2007:23:16:44 +0800] “GET /blog/feed/ HTTP/1.1″ 200 24315 “-” “FeedValidator/1.3″
这说明FeedValidator和FeedBurner都确实访问到了我的服务器,可他们怎么还是会超时呢?从浏览器访问的时候,虽然不是很快,但也没有30秒、60秒那么长,应该不会超时的。不过为了确认一下,找了一篇文章的comment的feed:http://www.fwolf.com/blog/post/310/feed,结果就可以通过检查:
Congratulations!
[Valid RSS] This is a valid RSS feed.
会不会是没有返回文件大小的原因?在wget的时候会看到:
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/xml]
FeedBurner只允许小于512k的feed,如果服务器不返回文件大小,FeedBurner就会中止操作?我试着返回一个伪装的文件长度,在wp-rss2.php中添加header("Content-Length: 10000");,这样用wget只能下载10k的内容,但是feed检查工具仍然报timed out错误。
无奈,只好给FeedBurner反馈意见,虽然是5.1休假期间,还是很快就收到了回信,大概说仍然是网站响应速度太慢了的问题(我从其他搜索得知限制大概是10秒以内),除了提升响应速度之外,暂时没有其他解决办法。
精疲力尽,忽然禁用Markdown Extra这个plugin之后,居然没问题了,看来还是响应时间的问题,Markdown Extra用到了太多的正则替换,加上最近写的几篇文章都不算太短,服务器响应略微慢了一些,加上中国到美国的数据传输时间,怪不得会超时呢。我也是疏忽了,上面的access.log和php的errorlog,都多少有些提示,但我没有注意到。
虽然定位了问题所在,但Markdown Extra还是要用的,没了它我写文章的兴趣会减少一大半,好在WP可以调整RSS中输出的文章数量(Options->Reading->Show the most recent: ? posts),我试了一下,默认是返回10篇,不过会超时,调整到7篇的时候就不会超时了,为了保险起见还是设置为5好了。希望网上的抓FEED机器人不要太懒,免得把文章跳过去喽。
几点感受:
-
发现问题之后,要善于寻找原因,不能盲目瞎摸,有些问题不找到根源,重试一万遍也不会改变,还是要一层一层的反复分析、排除。
-
如果在程序中要大量用到
Markdown语法的话,为了提高速度,可以采用空间换时间的方法,除了保存原文之外,把解析的结果也存一份,这样访问速度快。 -
作开发的时候对速度考虑的优先级要提高,10秒就超时啊,怪不得我不适应,被铁通蹂躏惯了。。。
顺便推荐一个不错的在线工具:
Bookmark and Share This Page
If you like this then please subscribe to the RSS Feed.
Save to Browser Favorites
Ask
backflip
blinklist
BlogBookmark
Bloglines
BlogMarks
Blogsvine
BuddyMarks
BUMPzee!
CiteULike
co.mments
Connotea
del.icio.us
DotNetKicks
Digg
diigo
dropjack.com
dzone
Facebook
Fark
Faves
Feed Me Links
Friendsite
folkd.com
Furl
Google
Hugg
Jeqq
Kaboodle
kirtsy
linkaGoGo
LinksMarker
Ma.gnolia
Mister Wong
Mixx
MySpace
MyWeb
Netvouz
Newsvine
PlugIM
popcurrent
Propeller
Reddit
Rojo
Segnalo
Shoutwire
Simpy
Slashdot
Sphere
Sphinn
Spurl.net
Squidoo
StumbleUpon
Technorati
ThisNext
Webride
Windows Live
Yahoo!
Email This to a Friend