-
云计算离我们有多远
Posted on 五月 9th, 2010 No comments由于做国外的电子商务网站,所以看云计算比较多,尤其是云存储。最近看了些资料,对云计算有了更多的了解。按照这篇An Architectural Map of the Cloud Landscape论文的框架,云计算分成的几个级别, 如下图
说明SaaS: software as a service; PaaS: platform as a service; IaaS:Infrustructure as a service。作者最后加上了Human as a service这个附加层。
也有人提出data storage as a service的概念,但是我认为多数互联网应用非流媒体等服务,对于P级以上数据存储的需求短期并非公共服务平台的需求。对于提供图片服务托管之类的公司完全可以使用一些开源分布式文件存储系统来实现大容量冗余存储的需求。
我看云计算的角度不是技术角度,而是从中小型电子商务网站的角度去看的。考虑的主要应用只是用来优化用户访问速度,对css和js做CDN,大牌如Akmai,limelight和Level3之类的服务商似乎不适合中小型电子商务网站。Amazon的S3价格貌似是最便宜的,Smugmug的一篇系统架构设计中提到他们就是使用Amazon S3来做CSS和JS的CDN。但是由于Nirvanix的SDN不对Request收费,所以对于平均文件在30k以下的来说,Nirvanix的TOS应该会更低一些。
其实国内中小网站的技术力量和的经济实力更低,也更需要低价的云存储和云架构服务。国内特殊的互联网环境,普遍较差的机房服务质量,网监的额外要求都会成为云计算应用和普及的重要障碍。不过,得到intel和dell的投资云计算服务商的Joyent好像已经开始与国内某市合作建立数据中心,似乎也有很大的信心在国内的云计算服务上进行投入。
-
nginx绑定独立IP
Posted on 五月 25th, 2009 No comments对于多个域名多个IP的服务器,有时候我们需要用户不能通过的IP直接访问网站。这有的时候是因为IDC机房的需要,有的时候是我们为了将网站直接隔绝开的需要。本文是想讨论Nginx下如何实现这样的设置。
如果是Apache的话比较好设定,可以用NameVirtualHost来指定哪个IP绑定哪个域名,但是nginx应该如何把ip绑定到域名商呢?Slicehost论坛上也有人讨论过如何绑定ip的问题。核心的问题就是,如果直接输入ip,nginx会把这个ip对应到哪个域名上呢?答案是随机的。如果想要在某个域名做为catchall的,可以设定如下规则:
server{ listen 80 default; .... }那么如何绑定独立IP呢?由于ip信息其实是在在NGINX官方HTTPcore Listen的说明文档上也提到了这个是用方法,可以比较方便的是使用如下
server{ listen 99.69.16.3:80; server_name www.abe.com .... }
也可以直接这样写:
server{ listen 114.163.186.110; server_name www.jefflei.com .... } server{ listen 99.69.16.3; server_name www.abe.com .... }这样独立的ip就被绑定到固定的域名上去了。
-
正确设置邮件发送的域名记录和STMP
Posted on 四月 15th, 2009 No comments域名配置
需要配置的域名应该是发送接收邮件@后面的部分。我们需要设置的有MX记录,PTR记录和SPF记录.
MX记录
规范的MX记录应当由主域解析出一个主机名(如mta.jefflei.com),再由此主机名解析出一个或多个IP地址(如 211.99.189.87和211.99.189.88),而不能直接由主域解析出一个IP地址,直接由MX记录解析出IP会被一些MTA认为是垃圾邮件。而且,主域解析出的主机名不应当同主域名相同。
PTR记录
配置IP反向解析,即PTR记录. 一条被AntiSPAM策略看成是绝对有效的PTR记录,其实包含2个内容:
A 找ISP做的 1.2.3.4 PTR记录指向到 a.b.com
B 域名的DNS设置(一般是域名注册商的域名控制面板)的 a.b.com. 的A记录也要指向到 1.2.3.4
设置完成后,可以用IP反向解析查询工具测试一下PTR设置是否成功。SPF(TXT)记录
详细参照SPF记录的设置案例说明
主机与软件配置
首先,如果你使用的不是第三方邮件服务商,而是使用自己搭建的SMTP, 那么你还有很多设置工作。首先,邮件系统一般使用操作系统的Hostname作为SMTP会话中HELO指令后面的内容,而某些比较严格的过滤系统会要求HELO内容是有A记录的域名,且与来源IP匹配。打开命令行界面,输入:
#telnet xxx.com 25 #ehlo
其次,在你的程序在外发邮件时,需要注意from和reply-to需要保持一致,某些MTA会block不一致的邮件。
另外,给出的from地址<support@jefflei.com> ,必须要在服务器上建立相应的电子邮件账号。因为有些收信服务商AntiSPAM策略会去校验其中包含的support@jefflei.com是否是有效的地址,一般过程是收件方AntiSPAM 连接到 jefflei.com 对应的 EMail Server,即203.96.209.88 的SMTP (TCP 25 )端口上,用VRFY support@jefflei.com ,或RCPT TO:<support@jefflei.com>来校验,如果命令返回得到250的结果,AntiSPAM策略会认为这是一个确 实存在的EMAIL地址。
-
nginx防盗链设置
Posted on 三月 31st, 2009 No comments防止盗链不仅能保护版权,又节约了不少流量。最近和bsdmap交流了下,听说他们通过防盗链节约了近1/3的图片流量。nginx的防盗链设置还是比较简单的,可以分为普通防盗链和ip/cookie based防盗链。其中ip based防盗链需要安装nginx的module,所以相对麻烦一些。
nginx最简单的防盗链设置如下
location ~* .(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.jefflei.com;
if ($invalid_referer) {
return 403;
}
}
通过nginx的重定向方式返回403错误。NginxHttpAccessKeyModule实现防盗链
需要先安装nginx的NginxHttpAccessKeyModule模块。其运行方式是:如我的nginx目录下有一个file.gz 的文件。对应的URI 是http://www.jefflei.com/nginx/file.gz
若用ngx_http_accesskey_module 后则根据用户的IP生成一个key值,如下的链接来访问http://www.jefflei.com/download/file.zip?key=23497sdf897. 只有给定的key值正确了,才能够下载nginx目录下的file.gz,这样就可以避免被盗链了。 -
SPF记录例子和详细解释
Posted on 三月 25th, 2009 2 commentsSPF是指Sender Policy Framework,是为了防范垃圾邮件而提出来的一种DNS记录类型,SPF是一种TXT类型的记录。SPF记录的本质,就是向收件人宣告:本域名的邮件从清单上所列IP发出的都是合法邮件,并非冒充的垃圾邮件。设置好SPF是正确设置邮件发送的域名记录和STMP的非常重要的一步。
如何查看SPF
Windows下进入DOS模式后用以下命令
nslookup -type=txt 域名
Unix操作系统下用:
# dig -t txt 域名
SPF的简单说明如下:
v=spf1 表示 spf1 的版本
IP4 代表IPv4进行验证(IP6代表用IPv6进行验证), 注意 “ip4:” 和“IP”之间是没有空格的
~all 代表结束SPF记录例释
我们看这条SPF:
yourdomain.com "v=spf1 a mx mx:mail.jefflei.com ip4:202.96.88.88 ~all"
这条SPF记录具体的说明了允许发送 @yourdomain.com 的IP地址是:
a (这个a是指 yourdomain.com 解析出来的IP地址,若没有配置应取消)
mx (yourdomain.com 对应的mx,即 mail.yourdomain.com的A记录所对应的ip)
mx:mail.jefflei.com (如果没有配置过mail.jefflei.com这条MX记录也应取消)
ip4:202.96.88.88 (直接就是 202.152.186.85 这个IP地址)
其他还有些语法如下:
- Fail, 表示没有其他任何匹配发生
~ 代表软失败,通常用于测试中
? 代表忽略如果外发的ip不止一个,那么必须要包含多个
v=spf1 ip4:202.96.88.88 ip4:202.96.88.87 ~all
测试SPF设置结果
设置好 DNS中的SPF记录后,发送邮件给自己的gmail,然后查看邮件的源文件,应该能看到类似的邮件头,其中有pass表示设置成功。
Received-SPF: pass (google.com: domain of test@jefflei.com designates 202.96.88.87 as permitted sender) client-ip=202.96.88.87;需要注意的是,服务器的IP若有更改,需要同时修改SPF!!!
利用SPF记录防止垃圾邮件
在Unix下可以安装配置SpamAssassin之类的插件来防止垃圾邮件和钓鱼邮件(Phishing)
最后提供两个有用的SPF工具
openspf的设置模版设置
测试SPF设置结果是否正确 -
也谈WordPress关键词高亮
Posted on 三月 15th, 2009 No comments在搜索结果页面结果中显示关键词,或者对搜索引擎带来的用户显示欢迎语和操作提示,是一个能有效提高网站易用性的方法。wordpress下关键字高亮工具有很多,有searchhilight, wp landing sites, wp-hightlights等,其中wp landing sites可以提供欢迎语,使用方法如下:
第一步,修改你主题下的single.php和index.php,加入以下内容
<?php if (ls_getinfo('isref')) : ?>
<p class='landingsites'>欢迎来自 <?php ls_getinfo('referrer'); ?> 的朋友! 如果您是第一次来到这里, 推荐您通过
<a href='/feed' target='_blank'>RSS feed</a> 订阅我的博客!</p>
<div class="hello">您所搜索的关键词为: <strong><?php ls_getinfo('terms'); ?></strong></div>
<?php endif; ?>第二步,在css中添加
.landingsites { background-color:#FFFEC6; border:thin dashed #CFCFCF; color:#333333; font-size:12px; margin:3px 0 10px; padding:6px; }第三步是修改插件中的landingsites.php中的searchengine数组中加入支持百度和中文谷歌的支持,
'google.cn' => 'q', 'baidu.com' => 'wd',
中文转码修改:
function ls_get_terms($d)函数最后返回return $terms;之前加上如下代码:if (!seems_utf8($terms)){ $terms=iconv("GBK", "UTF-8", $terms); }这样你就可以在百度和google中看一下效果了。
要继续优化,可以考虑以下几点:1. 在404页面中添加相关文章,这样即使是碰到google来的断链,用户也会找到些有用的东西:
<?php if (ls_getinfo('isref')) : ?>
<h2><?php ls_getinfo('terms'); ?></h2>
<p>欢迎来自 <?php ls_getinfo('referrer'); ?> 的朋友! 您所找的页面不存在,但是你搜索的关键词:<i><?php ls_getinfo('terms'); ?></i>. 有以下主题或许您也感兴趣:</p>
<ul>
<?php ls_related(5, 10, '<li>', '</li>', '', '', false, false); ?>
</ul>
<?php endif; ?>
2. 加粗或者高亮关键词:
加粗关键词请参见贝贝博客;如果只需要高亮关键词而不需要欢迎语可以用search_hilite插件。但是这两个方法在使用super cache时都会出问题,比较好的highlight是纯php方案,如Js的搜索引擎关键字高亮工具Search Engine Keyword Highlight,这方面的wp插件可以用这个wp-hightlight插件。需要注意的是这个插件的最后有个后门钩子,需要去掉,清洁后的版本可以在这里下载关键字高亮工具测试结果,在google搜索”nginx framework“,点击本站链接看效果:http://www.google.cn/search?hl=zh-CN&rlz=1I7GGLL_zh-CN&q=nginx+zend+framework
这个JS之前对中文和百度是不生效的,参照了这篇文章做了修改,现在百度和中文都可以使用了:
http://www.aiview.com/2005/08/highlight_keywords_with_javascript.html
-
域名解析DNS设置和检查
Posted on 三月 11th, 2009 No comments域名转移到godaddy作为注册商(registar)已经好几天了,有些用户反应无法访问网站,看了下是DNS问题。使用DNS report分析了下,发现了一个隐藏域名服务器(stealth nameserver), 应该是godaddy的问题,发了邮件让他们修改,希望能尽快改好。一般DNS服务商不大出错,平时也就不大关心,其实这些问题还是蛮重要的。查询方法介绍如下:在windows命令行下打入nslookup,然后输入:如果需要查询mx记录可以使用set type=mx来完成绝大多数的域名注册商都提供免费DNS托管,相对来说国内DNS服务比较稳定的是万网,其次是新网,后者的问题是设置CNAME比较麻烦。 -
几个DFS分布式文件系统
Posted on 三月 10th, 2009 2 comments在DFS出现之前较多使用的是NFS(Network File System), NFS 为一台服务器上的逻辑卷开放给远程客户端访问。客户端可以像操作本地硬盘一样操作另外一台服务器上的文件, 而不用知道它们是否文件存储在哪里。NFS可以简单地共享文件,但是它有一些缺点:
1.文件始终都只是存储在一台机器上。存储的容量不可能突破物理服务器的上限;
2.NFS并不考虑fail over,backup等高可靠性(HA)功能;
3.大并发时磁盘吞吐量较大,容易带来性能的瓶颈之后出现了较多的DFS分布式文件系统,较著名的有
hadoop

Yahoo!在06年雇佣Doug Cotting,希望通过支持Hadoop来提高其计算能力,以对抗Google的GFS。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS放宽了POSIX的要求,允许以流的形式访问文件系统中的数据, HDFS提供了很强的failover,互为备份和高可靠性的分布式文件系统。
HadOOP的使用者有Yahoo, Facebook和Amazon EC2, Amazon S3。我们看到hadoop的logo是个小象,可见项目组对这个项目将来的预期。Hadoop的另一目标是map-reduce计算。随着双核,多核甚至Stanford在做的1024核的出现,未来的编程重点会逐渐从OOP转向COP(concurrency-oriented programming)。而如何让程序员更简单地编写并行化程序,充分利用多核甚至分布式系统的计算能力,成为了很多研究的热点。Map Reduce就是在这种情况下出现的。
Mogile FS


MogileFS由memcahed的开发公司danga一款perl开发的产品,目前国内使用mogielFS的有图片托管网站yupoo等。MogileFS提供了自动的文件同步和备份,分布式存取,做到了底层文件系统透明,简单访问的目的。同时mogileFS有php扩展模块,方便php对文件系统的操作。
Hadoop和MogileFS都只适合一次写入,多次读的文件.并是大文件. 其中MogileFS相对对于小文件比较合适,适合用于图片服务器
Doug Cutting的访谈。
淘宝数据分析博客关于hadoop的实施指南
Hadoop一些中文介绍:
http://www.blogjava.net/killme2008/archive/2008/06/05/206043.html
http://www.mogilefs.cn/?p=19
Rapleaf应用hadoop的心得http://www.vimeo.com/2084824 -
VPS服务器的选择
Posted on 三月 8th, 2009 No comments因为每年两会的原因,今年很多未做登记的国内网站被迫停站,也催生了很多网络”移民”,开始移到国外的主机上。除了虚拟主机,多数稍有访问量网站选择了VPS。国外VPS较国内成熟,但是在选择上除了价格有很多需要考虑的因素,我用了2年的Linux VPS,因此谈谈自己的体会:
1. Managed VPS V.S. Unmanaged VPS. Managed VPS说白了就是有网管帮助你管理服务器,对于绝大多数用户以及程序员,如果你想把精力集中在网站本身,建议你选择managed VPS,可以省却很多麻烦。Unmanaged VPS的好处是价格低,如果你是系统管理员,或者想省钱,那么unmanaged会比较合适一点。
2. 使用的VPS种类,用了这么长时间VPS,其实对他们用的什么软件没有仔细研究,这几天做了点research,说明如下,供大家参考:- VMWare ESX: 性能一般,但是可以在windows上运行linux和windows的主机
- Parallels公司旗下收费版的VIRTUOZZO和免费版的OpenVZ
- Xen 或者收费版的Xen Enterpress
以上三款是以Linux为主的虚拟容器技术,占有市场份额较大,其中VMWare和Xen为完整模拟,就是相当于你完全控制服务器,要模拟额外内存更困难一些。 Virtuozzo的磁盘和内存读写性能稍好些,主要的缺点是底层网络操作不能进行完全控制,另外一个缺点是主机托管商可以比较容易模拟很多内存出来,因此要小心黑心运营商的注水猪肉。具体性能评测请见这篇http://www.51testing.com/html/36/n-14236.html
微软Windows Server 2008 x64版上的Hyper V,这个是windows VPS的主要软件,功能和VMWare和Xen类似。
很多VPS供应商提供测试账号,你可以要一个测试账号,用第三方服务测试网速。查看硬件
cat /proc/cpuinfo
需要注意的是Xen无法区分多核多CPU或者超线程处理器,因此看到的永远是单个单核服务器3. 稳定行和服务响应时间,买托管我觉得至少有1/3的价格应该花在买服务上。如果网站坏了也没人管,我想你是一定不愿意看到的。
4. 对于比较大的博客,国外的VPS服务商一般带宽足够使用了。如果你使用国内的网站,可能需要考虑一下流量和带宽的限制。 -
web服务器伪装
Posted on 三月 5th, 2009 No comments在服务器上发现很多攻击历史,可以看到黑客在不断尝试攻击,难怪现在肉鸡泛滥。由于个人网站没有时间及时更新web server到最新版本,你又不知道哪天有什么安全漏洞,比较好的办法是把web服务器类型隐藏,增加黑客攻击的难度。我们先看一下goolge和百度是怎么做的:
# curl -I www.google.com HTTP/1.1 200 OK Cache-Control: private, max-age=0 Date: Thu, 05 Mar 2009 04:01:06 GMT Expires: -1 Content-Type: text/html; charset=ISO-8859-1 Set-Cookie: PREF=ID=7087ebea8c3fcab5:NW=1:TM=1236225666:LM=1236225666:S=HYYAZJyJT7O4PLIO; expires=Sat, 05-Mar-2011 04:01:06 GMT; path=/; domain=.google.com Server: gws Transfer-Encoding: chunked
百度的Web服务器伪装:
#curl -I www.baidu.com HTTP/1.1 200 OK Date: Thu, 05 Mar 2009 04:03:09 GMT BWS/1.0 Content-Length: 3932 Content-Type: text/html Cache-Control: private Expires: Thu, 05 Mar 2009 04:03:09 GMT Set-Cookie: BAIDUID=57AC33DC9E472FADDB6DAE6815FCBFC6:FG=1; expires=Thu, 05-Mar-39 04:03:09 GMT; path=/; domain=.baidu.com P3P: CP=" OTI DSP COR IVA OUR IND COM "
要进行web服务器伪装通常来说需要重新便宜web服务器,下面介绍一下nginx和apache如何进行操作
重新编译nginx的服务器响应:
# cd nginx-0.6.34
# vi src/core/nginx.h#ifndef _NGINX_H_INCLUDED_ #define _NGINX_H_INCLUDED_ #define NGINX_VERSION "1.3" #define NGINX_VER "SaSaWS/" NGINX_VERSION #define NGINX_VAR "SaSaWS" #define NGX_OLDPID_EXT ".oldbin" #endif /* _NGINX_H_INCLUDED_ */
Apache可以修改以下文件
include/ap_release.h#define AP_SERVER_BASEVENDOR IBM #define AP_SERVER_BASEPRODUCT Websphere #define AP_SERVER_MAJORVERSION 5 //主版本 #define AP_SERVER_MINORVERSION 0 //次版本 #define AP_SERVER_PATCHLEVEL 13 //修正版本
file: os/os2/os.h
#define PLATFORM //OS的名称,例如:Solaris"
如果不是伪装,而只是不显示是apache,可以在apache配置文件中添加以下两行
ServerTokens ProductOnly
ServerSignature Off既然谈到了服务器,也就再谈一点php的安全措施,可以关闭显示服务器端为php,具体做法是在/etc/php.ini添加:
expose_php = Off
在php的生产环境下建议做一些额外的安全措施:
enable_dl = Off
disable_functions = exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show_source
如果你建立的是虚拟主机那么你需要一份更长的函数列表:
disable_functions = escapeshellarg, escapeshellcmd, exec, passthru, proc_close, proc_get_status, proc_open, proc_nice, proc_terminate, shell_exec, system, ini_restore, popen, dl, disk_free_space, diskfreespace, set_time_limit, tmpfile, fopen, readfile, fpassthru, fsockopen, mail, ini_alter, highlight_file, openlog, show_source, symlink, apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, parse_ini_file



