August 29, 2007 – 8:39 pm
Wordpress的URL静态化其实是通过Apache的URL Rewrite功能实现的伪静态话。在开启这个功能后,blog的根目录会生成一个.htaccess的文件,通过这个文件的一些配置项,来实现URL静态化功能。默认创建的.htaccess内容如下:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
简单来说,就是将访问到非实际存在的文件或者目录的URL全部转向至index.php。index.php接受到这个URL后可以根据这个URL的某些部分来确定要访问的具体页面。
然而启用这个静态化之后,会发现Dremhost后台通过 analog 6.0搭建的访问日志分析工具会访问不到了,会直接跳出Wordpress theme的404页面。原因大概是因为这套系统的入口是http://yourdomain/stats/这样的URL,实际/stats/是在Dreamhost的Apache配置中通过Alias指令添加的虚拟目录,并不存在于站点目录下。然而.htaccess中已经通过URL Rewrite将不存在实际文件或路径的URL直接定向到index.php中去了,因此/stats/这个虚拟目录就无法被访问了。
解决办法自然是修改URL Rewrite的配置,让其额外对待/stats/这个URL。将.htaccess中的代码增加2行,变成如下即可:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/(stats/|missing\.html|failed_auth\.html) [NC]
RewriteRule . - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
这样修改后/stats还会按照原有Dreamhost的配置访问,同时又不影响Wordpress的静态化功能。
此技巧来自Dreamhost的Wiki,另外还有其他Blog或CMS程序的配置方法,具体可以访问这个页面了解:http://wiki.dreamhost.com/index.php/Mod_rewrite
August 29, 2007 – 1:32 pm
这两天办公室不时有人机器中毒,结果整个内部局域网经常被ARP Poison充斥,导致网络瞬断,于是不得不想办法来实现静态IP-Mac地址绑定。然而在我用的Windows Server 2008 beta3的机器上,却碰到了一个很奇怪的问题。
在本机键入如下命令,这个IP是我局域网网关的地址,MAC为其内网网卡的MAC:
C:\Windows\system32>arp -s 10.0.0.254 00-11-d8-64-6b-bc
结果失败,错误提示为:
The ARP entry addition failed: 5
放狗搜了一下这个错误提示,发现这个提示应该为权限不足。见鬼了,明明用的是administrators组的用户,却权限不够?于是把故障嫌疑定位到UAC上去,发现无论是怎样调整,甚至关掉UAC,都还是同样的结果。同时用Process Explorer检查发现我的CMD进程有足够权限执行此项配置,这样也断定不可能是用户权限问题,简直是见鬼了。
然后就是打开安全审核,拼了命查找各项安全日志,无奈发现不了任何蛛丝马迹。回头一想,貌似命令行下的一些个命令都不生成安全审计记录的,这次彻底郁闷了。
翻着翻着资料突然看到了netsh这个工具,这玩艺是MS建议以后再命令行配置Windows网络协议栈的一个类似IOS的新工具,死马当活马医,试试看这玩艺能不能操作ARP表,简单看了一下帮助,于是弄出来这么个命令:
C:\Windows\system32>netsh -c “interface ipv4″ add neighbors 10 “10.0.0.254″ ”00-11-d8-64-6b-bc”
其中数字10为我本地网卡连接的index,这个从show interface可以看到。或者直接替换成网卡名称也可以,就是”Local Area Connection”了。
结果这个命令竟然成功了,运行之后再运行arp -a可以看到static的ARP表项已经按照预想的一样创建成功。也就是说,前面使用arp -s添加失败根本不是权限不够的原因,而是其他原因了。具体什么原因呢?我个人猜想恐怕是内核网络部分一些数据结构或者API的变更,同时arp.exe这个工具没有跟随更新导致的broken问题吧。
更诡异的在后面,虽然我目的达到了,但不小甘心又使用arp -s修改了刚添加的静态表项,结果发现竟然修改成功-_-b,然后又继续测试其他情况,发现如下结论:
1,目前ARP表中不存在对应IP的记录,可以用arp -s添加新的静态IP-Mac绑定。
2,目前ARP表中已经存在对应IP的static表项的记录,可以用arp -s修改为新的静态IP-Mac绑定。
3,目前ARP表中已经存在对应IP的dynamic表项的记录,使用arp -s添加新的静态记录时会出现错误:The ARP entry addition failed: 5
总之这个版本的Windows附带的这个arp.exe一定有问题,改天找找看有没有联系方式能否反映给MS开发部门。
August 28, 2007 – 1:51 pm
上周收到张总送来的生日礼物–Reclusa键盘,用到现在可谓小有体会了,又答应要写篇评测,那便就写了。没稿费,废话就少,咱摄影技术差,照片也不拍了,全部取自pconline,其评测也做得非常不错,尤其是拆解图,评测链接为http://www.pconline.com.cn/diy/mouse/reviews/0707/1063031.html,在此对太平洋表示感谢^_^
August 21, 2007 – 12:46 pm
这个应该不算是新闻了吧。具体被入侵的时间应该是8月6号,10号左右有新闻放出来。然而当时一直没有更确切地细节放出来,入侵原因也不明。今天偶然看到一篇Eweek的文章,才发现原因很简单—-服务器没及时打补丁-_-b
原文链接如此:http://www.eweek.com/article2/0,1895,2171318,00.asp
引用一句话:the servers have not been upgraded past breezy due to problems with the network card and later kernels. This probably allowed the attacker to gain root.
其实也就是说因为硬件与高版本内核兼容性的问题导致不能升级到无缺陷的内核版本,进而被人利用内核漏洞拿到了root,再然后被上了个sniffer嗅探到了明文密码,据推测可能是ftp帐号。再进一步控制掉整个服务器群。最后似乎拿来干坏事的时候才被发现服务器已经被人光顾了……
话说要适应商业化运作需求,就必须要有出了问题有人来擦屁股。开源社区整天东一头西一头的翻新花样出新奇玩艺儿,对老东西的维护修补却欠缺热情。花钱买东西的人,就是要你这东西能持续不断的服务,才不管你新东西怎么怎么好来的。而一个持续稳定地框架,确实是一个活跃过了头的社区最缺乏的东西。
话又说回来,你不做有人帮你做。各大发兴版厂商是干什么吃的,不就是在有限的几年内把社区在这几年吐出来的东西加工起来卖得么。这里的怪现象是:越有实力的厂商,发布周期越长,商业用户黏着度越高。象RH,Suse。但越亲近用户的厂商,就推陈出新越快,但往往不是那么好混,象Mandrake。这种厂商一旦用户见异思迁,倒掉也不过是瞬间的事情。说是厂商还不如说是一个商业运作的社区。Ubuntu这方面可谓做到了极致,有一群疯子般的开发团队,半年一个版本的速度也可谓前无古人后无来者。但话说回来了,即使有号称Server的版本,谁敢拿它的东西跑企业应用?半年一次翻新,受得了么?还难保不说这个Server版可能过几天就人去楼空掉链子?这次更绝,一个毛病把自己老窝都给毁了…..
再指责谁谁谁bug多漏洞多是不现实的,现在这个年代,谁也不比谁好多少。有严谨的补救计划才是正道。微软虽然以补丁多著称,好歹如果每个月第二个周二都按时打,一般都没出过大问题。而所谓的“高级”Unix like的sysadmin,恐怕也就Linux的root们没有打补丁的习惯的多。
说道补丁又想起一件好玩的事。前两天世界范围内skype大掉线,原因猜测是啥的都有,终于这两天好了,官方blog出来这么一篇声明:What happened on August 16,有意思了,微软的Patch Tuesday竟然导致号称跨平台的skype瘫痪成这样,是该说Windows普及还是skype说谎呢?
结论:只有一个,不打补丁者害人害己。
August 11, 2007 – 10:43 pm
今天看到了这么一个新项目–MySQL Proxy,貌似最近比较热门。简单来说就是一个从MySQL Client到Server的一个代理。可能有人认为MySQL这种连接方式不应该会用到代理,因为一般来说都喜欢把MySQL Server放到后端,用内网圈起来,这样一方面保证安全,另一方面用Local Ethernet来避免不稳定因素较多的Internet连接,因此基本没有代理这个角色出现的机会。然而,假如这个代理不仅仅是一个代理,而是一个能“懂得”连接双方传送内容,并有可能会对双方内容加以控制甚至干涉的一个角色呢?还有没有人觉得他没用?联想一下Squid之于HTTP Client和HTTP Server所能起到的作用,是不是能想到更多了呢?
是的,MySQL Proxy就是这么一个玩艺儿。代理仅仅是其最不值一提的功能,让人激动的功能都是建立在代理这个前提之上,能实现的更好玩的东西,例如以下:
Query Interception
Query Filtering
Query Rewriting
Macro Expansion
可能对于没接触过这个东西的人,这几个概念还不是十分直观,那么这样,在脑子里描绘这样一幅情景:
1,原本为Cilent-Server直连这种拓扑,现在引入MySQL Proxy,变成Client-Proxy-Server。
2,原本为了实现高容载能力,对于Server采取了多台并存,Master/Slave甚至是Master/Master等方式的复制集群,配置管理都比较复杂。而引入了Proxy以后,中间存在了这样一个Store-Forward的proxy环节。
3,在这个环节,我们可以通过一种脚本语言来控制这个proxy的行为,例如对于Client进来的查询依照某种条件过滤,甚至依照某种条件改写,再导向后端的Server。
4,凭借自己实现的filtering或rewriting,我们可以实现很多目的,例如Failover,例如Load balance。或者更无聊些我们可以对Client进来的带有弱智语法错误的SQL语句进行修正。
有了这个东西,几乎是想到什么就能完成什么,这可是大大得扩展了MySQL应用的多样性,可以用它来实现一些高端商业数据库的复杂的企业化功能。相信喜欢MySQL的架构设计师们一定会喜欢这个玩艺儿。
这里有篇Getting Start,是很好的入门教材,对于这套软件,定要保持关注。
前几天Linus决定用CFS替换掉O(1)的时候就引发了一场flame war,然而除了几个当事人之外,其他人也仅仅能从使用体验上提出一些意见或者benchmark数据。更因为这些schedulers都没有经过长期考验,没有经验性数据,一堆各个领域的用户都七嘴八舌得参与进来,进而这场大讨论又闹到Server VS Desktop,Scientific Computing VS Gaming等等等等。谁让scheduler本身就是一个牵一发而动全身的关键组件呢,动这玩艺就相当于给人换大脑一样。
这次论战现在又有学院派的高人卷进来了,恰逢FreeBSD的ULE调度器3.0发布不久,所以ULE的作者Jeff Roberson (jeffr)也写了一篇文发表了自己的看法,见此:http://jeffr-tech.livejournal.com/12933.html
jeffr的文章是从设计角度来讨论了这三个调度器实现的不同点,基本上也就是使用的数据结构和算法不同带来的性能影响,有兴趣可以仔细看看,比起LKM那些论战来,不需要懂得那几个大牛之间的前恩宿怨,应该要好看一些。
另外看看用户而不是开发者的comments也是挺好玩的:http://osnews.com/comment.php?news_id=18401
不过毕竟是看过代码才有发言权,普通用户的言论看过就好,没必要较真,真要了解细节还只能看代码。话说回来看完代码估计也不一定就了解。Scheduler设计真是每个变量都要考虑到毫厘,象我这种仅仅是结合几部书讲解调度器的章节过了一遍O(1)和初代ULE的人,还是不理解为什么这样设计或为什么不那样做。所以还是继续看大牛们的热闹吧。
是一个Security Update,没有功能上的改变,覆盖文件或者做patch档都可以完成。这里是Changelog。
说来有一个多周没更新Blog了,最近没什么动力码字,虽然觉得有不少东西该写写了。