<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/</link>
<title><![CDATA[博客迁移至VPS]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Tue, 11 May 2010 17:24:40 +0000</pubDate> 
<guid>http://www.snooda.com/read/</guid> 
<description>
<![CDATA[ 
	昨天花时间做了定期备份功能，每天自动把数据库导出发到gmail里，有了备份就能放心的把博客迁过来了。今天着手开始迁移。<br />
<br />
首先先清理VPS，由于农场外挂我用的是php写的，想法是在需要的时候可以通过访问URL来手动收菜，平时用一个脚本跑着周期性的去curl那些php。最近经过使用发现手动收菜也没什么必要，所以把php移动到home目录下，脚本直接用php命令来调用外挂，稍事修改，用getopt来获取传入的参数。<br />
<br />
然后把刷邮件的脚本也如法炮制，移动到home下。<br />
<br />
现在开始迁移博客程序，比较简单，打包上传后tar解压。<br />
<br />
遇到第一个问题：rewrite移植。Apache下rewrite是很方便的，直接用.htaccess就可以实现，nginx不支持.htaccess，所以就要在配置文件里写，在网上找了下相应资料，发现全是抄来抄去的，没有一点新意。只好自己摸索。<br />
<br />
把Apache下的rewrite规则修改成nginx格式，发现总是报该页无法显示。以为是放的位置不对，来回挪了好几次，不是404就是500。非常郁闷。<br />
<br />
决定看看日志，发现错误日志里写着：[error] 18188#0: *1 rewrite or internal redirection cycle while processing&quot;/var/www/html/index.php&quot;<br />
也就是说陷入了循环中。于是猜想nginx在每次rewrite后都会当做一个新请求来再次按配置文件跑一遍，结果index.php就无限rewrite给自己，陷入循环中。不知道为什么nginx这样设计，效率很低啊。应该是为了实现某种功能而做的妥协吧。<br />
<br />
幸好nginx的配置文件里支持if语句，于是用正则表达式判断下，假如已经是index.php了，就不rewrite了。<br />
<br />
现在页面可以显示出来了，但是css，js都还无法读取，原来我在Apache下对这些文件夹关闭了rewrite，而nginx无此功能。只能在配置文件中再正则匹配一下，假如访问css，js等文件夹就不rewrite。<br />
<br />
现在页面已经显示出来了，遇到一个新问题，PHP报warning说filter_var函数找不到。查了下手册发现原来5.2以后的php才有该函数。而VPS用的Cent软件仓库里是5.1.6的PHP，第一想法是编译个5.2，但是由于VPS内存比较小，而且是OpenVZ的，所以很容易爆内存，恰好在filter_var官方介绍页下有人留言，说他用的也是Cent，自己编译了个filter模块加载进去，解决了此问题。这个方法看起来很有吸引力。<br />
<br />
先按他说的装了一些必备的库，下载了filter-0.11.0的源码包，下下来一看傻眼了，没有configure文件。也没有Makefile。不知如何下手，回头看那篇文章，里面提到了phpize，原来这是php自带的命令，是编译php模块时进行一些初始化操作的。果然运行后有了configure。然后就是./configure。然后make。这时报错，说找不到php_pcre.h。我找遍整个根目录都没找到有这个文件，搜了下原来在php源码包里，于是又下了个php5.3的源码包，把里面的php_pcre.h揪出来。然后make通过，make install。完成后去php模块目录下就看到一个filter.so出现了。去php.ini里将该模块加载，重启FastCGI php，刷新页面。成功加载模块。<br />
<br />
<br />
问题源源不绝，紧接着发现从博客迁移过来的数据出现了乱码，奇怪的是评论正常，博文乱码。用set names utf8、set names latin1均无效，数据库数据类型也符合。所以判断是内容乱码了。仔细查看导出的.sql文件，发现博文正文用的是十六进制导出，而评论则是字符导出。应该是十六进制的转换过程有字符集对不上号的情况发生。把博文用字符导出一遍，再导入，正常了。<br />
<br />
一切都准备好后，把域名解析转到VPS的IP上，过了半小时的样子，DNS更新，成功迁移了！<br />
<br />
又发现两个小问题，一是农场外挂不工作了，而是博客日志不记录。查看了下外挂错误日志，原来是外挂迁移后没有权限写自己日常日志了。修改了下权限。再一看博客日志也是这个问题。很快修复了。<br />
<br />
然后又开了个虚拟主机，开在6000端口，把外挂收菜日志页放在上面。结果发现无法访问，chrome提示:ERR_UNSAFE_PORT 。比较疑惑，搜了下，原来很多病毒之类的爱开6000端口，所以浏览器为了安全起见不允许访问6000端口。汗，第一次知道还有这事。把端口修改到别的端口，可以了。<br />
<br />
迁移后下一步就是再做一些服务器的监控脚本，监控并统计服务器运行状态。并开始博客新一轮升级。
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/#blogcomment</link>
<title><![CDATA[[评论] 博客迁移至VPS]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.snooda.com/read/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>