冰河

272010

WP Super Cache 是 WordPress 官方开发人员 Donncha 开发,是当前最高效也是最灵活的 WordPress 静态缓存插件。它把整个网页直接生成 HTML 文件,这样 Apache 就不用解析 PHP 脚本,通过使用这个插件,能使得你的 WordPress 博客将显著的提速。

WP Super Cache 基本介绍

WP Super Cache 是基于 Ricardo Galli Granada 的 WP-Cache 2。WP-Cache 2 可以缓存你的 WordPress 博客使得不用再次访问数据库,但是它产生的是 PHP 文件而不是 HTML 文件,所以还需要 PHP 引擎去解析它们。而 WP Super Cache 则直接产生 HTML 文件,所以服务器不用解析甚至一行 PHP 代码,所以缓存之后的速度就和访问你服务器上的一张图片一样快。

WP Super Cache 是如何工作的

一半常规的缓存办法是手工把动态页面保存为 HTML 代码,WP Super Cache 也是通过同样的方式的,但是通过自动的方式完成这个过程。

当你一个访问者来的你的站点,他没有登入或者也没有留言,这样他得到是一个在 WordPress cache 文件夹下的 supercache 子文件夹下的纯静态文件,其实你都可以自己到上面的 supercache 目录下去查看同样的永久链接的 HTML 文件的备份。判断一个页面是否已经被缓存了,查看该页面的源代码,看看最后一行是否有 <!– super cache –> 或者 <!– super cache gz –>。

如果访问者已经登陆或者留了言,就会返回 WP Cache 函数生成的页面,并且最后一行会有 <!– Cached page served by WP-Cache — >

WP Super Cache 基本使用

上传 WP Super Cache 到插件目录,并在 Plugin 目录下激活之后,就可以到 Setting > WP Super Cache 进行详细配置。

WP Super Cache Status

首先是三个选项:

  • ON (WP Cache and Super Cache enabled)
  • HALF ON (Super Cache Disabled, only legacy WP-Cache caching.)
  • OFF (WP Cache and Super Cache disabled)

默认情况下,WP Super Cache 是没有开启的,所以在这里选择下,需按则第一个,就是 Super Cache,缓存为静态文件,如果第二种情况呢,则和 WP-Cache 一致。

Proudly tell the world your server is Digg proof! (places a message in your blog’s footer)
这个是说在你的 footer 显示一条信息告诉读者该博客已经缓存了,一般不要这样做。

Clear all cache files when a post or page is published. (This may significantly slow down saving of posts.)
这个是说发布新日志的时候清理所有缓存,这个肯定不能这么干了。

Super Cache Compression

启动这个则会成生 gzip 压缩,节省你的带宽。

Mod Rewrite Rules

WP Super Cache 是通过 Mod Rewrite 实现访问静态文件的,所以这里在是显示添加的 Mod Rewrite 规则。

Expiry Time and Garbage Collection

过期时间和垃圾收集,这里主要设置缓存文件过期时间,和多久删除一次过期的缓存文件。个人建议:一般缓存时间设置为1天(86400)左右,缓存删除时间为1个小时一次。

Accepted filenames, rejected URIs

这里设置一些链接不需要缓存,并且可以设置特例。

Rejected User Agents

这里设置某些 User Agents 来访问的时候不会缓存。比如 Google 和百度爬虫等。

Cache Contents

这里显示你博客缓存文件和过期文件的数量,你可以手工删除缓存文件和过期文件,因为 WP Super Cache 有垃圾回收机制,所以这里不帮不用手工删除,如果当你测试某个插件,看不到效果的时候,如果确定是缓存的原因,你可以到这里手工删除测试下。

Lock Down

一般情况下,某篇日志如果有了新留言,就会更新缓存文件,不过这篇日志是否已经到了缓存时间,但是在某种情况,你预料到你的博客可能会有很大流量和留言,候重复更新缓存文件可能并不是很好的选择,速度反而更慢,这个时候你就可以锁定缓存文件,新留言不再更新缓存日志。

插件作者也给出了一段代码,如果你的博客锁定了之后,可以通过判断一个变量 WPLOCKDOWN 是否存在告来诉读者,你博客已经锁定,待会才会更新,当然了,一般博客不建议使用。

Directly Cached Files

直接缓存文件,根据永久链接直接缓存,比如你的关于页面是不太更新,你就可以直接缓存它到你的 about 目录下(假如你的关于页面的 slug 是 about),这个直接缓存不会过期。适合一些经常性不更新的静态页面。

Configuration messed up?

因为上面那么多配置,你可能搞糊涂了,那么这里可以让你一键恢复到默认。

Cache Plugins

缓存插件还支持附加插件,比如作者自己就提供一个插件:No Adverts for Friends,不对朋友显示广告。

google.com 首页代码分析

Posted by 冰河 at 18:56 No Responses » 5,270 Views
262010

机缘巧合,对 google.com 的首页代码产生了浓厚兴趣。一点“分析”,杂记如下:

不同浏览器推送不同代码
google_src_diff.png

上图是在不同浏览器下,保存的 google 首页代码。

注意:文件大小是经过 IntelliJ IDEA 格式化处理后的大小,请查看:lab/2009/google.

其中 Chrome 和 Safari 的代码是一样的,Opera 仅仅一个 js 函数的写法与 Chrome 不同。差异最大的是 Firefox 和 IE。

我的想法:大部分应用场景下,针对不同浏览器实现不同版本,会增加开发和维护成本。google 首页采取这种差异化方案,很可能是考虑到要最大限度降低网页流量。毕竟对于日访问量上千万的网站来说,减少一个字符都能节约可观的流量。精简节约,在 google 首页上体现得淋漓尽致,下面会继续提及。

doctype 的写法

只有 Firefox 用了《!doctype html》来激活标准模式。其它浏览器下,都是简单粗暴的 Quirks 模式。

我的想法:Firefox 下也可以直接用 Quirks 模式,视觉差异上极小。不清楚 google 为何仅针对 Firefox 开启了标准模式。

值得注意的是,在 google 搜索结果页,所有浏览器下都使用了《!doctype html》。 毕竟结果页复杂些,依旧用 Quirks 模式的话,会增加开发成本。首页因为简单,Quirks 和 Standards 相比,没什么显著差别,因此能省就省。

关于 doctype, 强烈推荐阅读:Activating Browser Modes with Doctype

对浏览器来说,doctype 实际上仅影响浏览模式,因此能从简就从简。W3C 校验,我觉得没必要,很少关注。

精简,还是精简

以 Firefox 下 google 首页的源码为例:

html, body 缺胳膊少腿

html 元素的很多属性没有用双引号括起来

class, id 等命名很短

script 和 style 元素没 type 等属性

没有 keywords 和 description 等 meta 值,我是搜索老大,哈哈

balabala 等等

想起一句话:遵守规范的一个重要标准,就是知道何时打破它,并大胆地打破。从这层意义上讲,google 首页是非常遵守规范的。

没有完美

细心点,还可以发现:

引号去得不彻底,比如《img alt=“Google” 。..

还有padding-left: 0px, px 可以去掉

js 上,也有进一步精简的余地。比如下面两行完全一样的代码,很?:

if(google.y) google.y.first = [];

if(google.y) google.y.first = [];

还有一段代码,div 提前到 script 前面能省去判断:

《script》

function wgjp() {

var xjs = document.createElement(‘script’);

xjs.src = ‘/extern_chrome/1mZ_-PL2Zjc.js’;

(document.getElementById(‘xjsd’) || document.body).appendChild(xjs)

};

《/script》

《div id=xjsd》《/div》

也许吹毛求疵了,笑过。

预加载

看代码:

《body onload=“sf();if(document.images){new Image().src=‘/images/nav_logo4.png’}” 。..

这就是 YSlow 34条性能法则中的 Preload Components. google 首页提前加载了搜索结果页的 css sprite. 另外赞一下这个 sprite 图的组织,很 cute.

延迟加载

看代码:

window.setTimeout(function() {

var a = document.createElement(“script”);

a.src = “/extern_js/f/。../XRt_2Y4Z5sM.js”;

(document.getElementById(“xjsd”) || document.body).appendChild(a)

}, 0);

上面这个 js 挺大的,包含了 google 的 js 库和输入框的提示补全组件。这个 setTimeout 起到了将下载进程延迟到 window.onload 后。很小的代码调整,却提升了不少用户体验,实在划算。

另提一下,这个 js 在不同浏览器下也有不同版本,大小差异比较明显。为了尽可能减少流量,google 还真费心。

奇淫技巧

代码虽少,淫荡之处却摇曳生姿:

1. 遍历数组

for (var i = 0,c; c = [“ad”,“p”,“pa”,“zd”,“ac”,“pc”,“pah”,“ph”,“zc”][i++];) {

// doing something, such as console.log(c)

}

2. 短路语句

function _gjp() {

!(window._gjwl.hash && window._gjuc()) && setTimeout(_gjp, 500)

}

短路表达式很常用,但用短路单独做语句,还真精简。

语义化

从语义上讲,google 的 html 代码是比较糟糕的。但考虑到各种浏览终端,或许 google 目前的写法非常优化。没有接触过跨n 》 20的浏览器开发经验,对此不多说。

小结

从首页代码中,能看出 google 推崇的是:简单 + 实用 + 性能。我越来越认同这种观点。

IMDB前50名的电影

Posted by 冰河 at 12:43 No Responses » 6,515 Views
252010

排名    IMDB得分    上映时间    电影名

01. 9.1 1994    肖申克的救赎/刺激1995(台)/月黑高飞(港)

02. 9.1 1972    教父

03. 9.0 1974    教父:II/教父续集/教父2

04. 8.9 1966    黄金三镖客/黄昏三镖客(台)/独行侠决斗地狱门(港)

05. 8.9 1994    低俗小说/黑色追缉令(台)/危险人物(港)

06. 8.9 1993    辛德勒名单/辛德勒的名单(台)/舒特拉的名单(港)

07. 8.8 1957    十二怒汉

08. 8.8 2008    蝙蝠侠前传2:黑暗骑士/黑暗骑士(台)/黑夜之神(港)

09. 8.8 1975    飞越疯人院/飞越杜鹃窝(台)

10. 8.8 1980    星球大战Ⅴ:帝国反击战/帝国大反击(台/港)

11. 8.8 1942    卡萨布兰卡/北非谍影(台/港)

12. 8.8 1977    星球大战/星际大战(台)

13. 8.8 2003    指环王:王者归来/魔戒三部曲:王者再临(台/港)

14. 8.8 1954    七武士/七侠四义(港)

15. 8.7 1990    好家伙/四海好家伙(台)/盗亦有道(港)

16. 8.7 1954    后窗/偷窥

17. 8.7 2002    上帝之城/无法无天(台)/无主之城(港)

18. 8.7 1981    夺宝奇兵:法柜奇兵/法柜奇兵(台)/夺宝奇兵(港)

19. 8.7 1999    搏击俱乐部/斗阵俱乐部(台)/搏击会(港)

20. 8.7 1968    西部往事/狂沙十万里(台)/万里狂沙万里愁(港)

21. 8.7 2001    指环王:护戒使者/魔戒首部曲:魔戒现身(台/港)

22. 8.7 1994    非常嫌疑犯/刺激惊爆点(台)

23. 8.7 1960    精神病患者/触目惊心(台)/惊魂记(港)

24. 8.6 1991    沉默的羔羊

25. 8.6 1950    日落大道/红楼金粉(台)/日落大道(港)

26. 8.6 2009    飞屋环游记/天外奇迹(台)/冲天救兵(港)

27. 8.6 1999    黑客帝国/骇客任务(台)/廿二世纪杀人网络(港)

28. 8.6 2009    第9区/第九禁区/第九区/9号地区/九号禁区

29. 8.6 1964    奇爱博士/密码一一四(港)

30. 8.6 2000    记忆碎片/记忆拼图(台)/凶心人(港)

31. 8.6 1959    西北偏北/北西北(台)/夺魄惊魂(港)

32. 8.6 1946    美好人生/生活多美好/风云人物(台)/哀乐人生(港)

33. 8.6 1995    七宗罪/火线追击令(台)/七宗罪(港)

34. 8.6 2002    指环王:双塔奇兵/魔戒二部曲:双城奇谋(台/港)

35. 8.6 1941    公民凯恩/大国民(台/港)

36. 8.6 1994    这个杀手不太冷/杀手莱昂/终极追杀令(台)

37. 8.6 1979    现代启示录/战争启示录/地狱的默示录

38. 8.6 1999    美国丽人/美国心、玫瑰情(台)/美丽有罪(港)/美国美人

39. 8.5 1976    出租车司机/计程车司机(台)/的士司机(港)

40. 8.5 1998    美国X档案/野兽良民(港)

41. 8.5 1958    迷魂记/晕眩/眩晕

42. 8.5 1962    阿拉伯的劳伦斯/沙漠枭雄(港)

43. 8.5 1994    阿甘正传/福雷斯特·冈普

44. 8.5 2008    机器人总动员/瓦力(台)/大空奇兵·威E(港)

45. 8.5 1957    光荣之路

46. 8.5 2001    天使艾美丽/艾蜜莉的异想世界(台)/天使爱美丽(港)

47. 8.5 1944    双重赔偿/双重保险(台)/双重生活(港)

48. 8.5 1931    M就是凶手/M/凶手M

49. 8.5 1979    异形/异形I

50. 8.5 1962    杀死一只知更鸟/梅岗城的故事(台)/怪屋疑云(港)

1.概述
   http://video6.sjtu.edu.cn(以 下简称video6网站)是上海交通大学网络信息中心在下一代互联网CERNET2上建立的视频服务网站,通过IPv6网络向全球提供服务。目前主要提供 几十个电视台、电台的网上直播,以及测试性提供少量视频点播内容。该网站广受用户好评,是目前国内IPv6网络上流量最大的网站。考虑到当前IPv6网络 资源较少,而该站点电视直播资源丰富,用户群体很大,能够在一定程度上反映出IPv6用户的分布和使用状况。因此我们决定对该站点的Web访问日志进行分 析。我们希望通过初步分析达到以下目的:
   了解网站目前的访问情况。这样有助于我们更全面掌握服务器的使用状况,合理配置视频服务的软硬件系统,更好的为用户提供服务。
   分析目前IPv6用户的分布状况和接入方式。在当前国内IPv6普及率不高的情况下希望得到用户比较集中的地区分布并进行初步统计分析。
   原始日志数据
   我们在video6网站的Web服务器端启动了日志记录功能,日志记录的格式为: date time s-sitename cs-method cs-uri-stem cs-username c-ip cs-version cs(User-Agent) cs(Referer) sc-status sc-bytes,收集了从 2008年2月26日到2008年3月27日共一个月的日志。这份日志一共涉及到 129,236个不同的IPv6地址,包含2,930,961条原始记录。
   我们依次采用下列手段过滤了一些对于此次统计分析没有意义的访问记录,包括:
   1.由于服务器是双栈的,日志中存在来自Baiduspider等搜索引擎和网络扫描产生的少量IPv4地址的访问。因为这些数据不能反映IPv6用户 的真实访问情况,我们首先将这些数据剔除在分析数据集之外。这些记录一共 364条,占所有原始记录的0.012%。
   2.考虑到不是所有用户都会访问video6网站的论坛和网速带宽测试栏目,而这种访问可能会使一个用户产生较多的日志记录,对后来的分析产生干扰。我们也过滤了用户访问这些内容的日志记录。这些记录一共 281,189条,占所有原始记录的9.59%。
   3.同样是为了避免干扰分析,我们过滤了扩展名是 .zip,.exe 等文件的下载记录。这些记录有20,092条,占所有原始记录的0.686%。
   4.我们发现日志里对部分目录的GET请求,显示的IPv6地址会以%0结尾,这可能和Web服务器的处理有关。由于这部分IPv6地址在请求其他文件 时已经有所反映,并不会影响我们此次的分析,所以可以忽略。这些记录有1,818,846条,占所有原始记录的62.1%。
   经过这些过滤,最终剩余810,470条访问记录作为此次分析样本,占所有原始记录的27.7%,涉及到 129,236个不同IPv6地址。
   用户IPv6地址来源和地区分布
   根据我们目前所掌握的信息,用户的IPv6地址主要来源于4种途径。
ISATAP隧道方式
    ISATAP隧道方式获取的IPv6地址格式为:Prefix(64bit):0:5efe:IPv4ADDR(IPv4ADDR即隧道端点的IPv4源 地址,常见形式为a.b.c.d),所以在日志记录中我们很容易发现哪些用户使用ISATAP方式接入。一般说来,如果用户的IPv4地址不发生变化,那 么他通过ISATAP隧道方式获取的IPv6地址也不会发生变化。我们经过统计发现存在有34个ISATAP服务器地址,共出现了10,056个不同的 IPv6地址,占分析样本所有地址的7.78%。
表1. ISATAP服务器活跃程度排名Top20
排序.   Prefix(64bit):0:5efe   提供者    IPv6地址数  
1   2001:da8:1005:1111:0:5efe   南京农业大学   2223  
2   2001:da8:21c:6ff:0:5efe   中国人民大学   1669  
3   2001:da8:207:1:0:5efe   北京师范大学   1459  
4   2001:250:2009:400c:0:5efe   四川西华大学   1004  
5   2001:da8:c803:85:0:5efe   西南大学   984  
6   2001:da8:200:900e:0:5efe   清华大学   472  
7   2001:da8:c800:b:0:5efe   重庆大学   403  
8   2001:da8:c003:3:0:5efe   西北师范大学   385  
9   2001:da8:8000:3:0:5efe   上海交通大学   334  
10   2001:250:5008:2000:0:5efe   江苏工业学院   324  
11   2001:da8:205:ffff:0:5efe   北京交通大学   204  
12   2001:da8:224:a0d2:0:5efe   中国政法大学   180  
13   2001:da8:224:a0ce:0:5efe   中国政法大学   94  
14   2001:da8:211:2:0:5efe   北京林业大学   89  
15   2001:da8:7007:ffff:0:5efe   石油大学   44  
16   2001:da8:224:a021:0:5efe   中国政法大学   34  
17   2001:da8:224:a037:0:5efe   中国政法大学   26  
18   2001:da8:b8:66:0:5efe   同济大学   26  
19   2001:da8:7007:fffe:0:5efe   石油大学   25  
20   2001:da8:e800:2:0:5efe   厦门大学   15  

    从表1中我们可以看出几乎所有ISATAP隧道接入方式都由国内大学或学院提供。分析对应的IPv4地址可以看出这些主要面向校内用户(出现的IPv4地 址是内部地址或校内地址),但是也有部分允许校外接入使用。由于在部分学校存在DHCP自动获取IPv4地址的现象,这样同一个用户在不同时间访问 video6网站,日志记录到的可能是不同的IPv6地址。这会给我们的分析带来一定程度的偏差,所以并不能说出现地址多的学校用户数一定比地址少的用户 多,这仅仅是一个趋势上的大致排名。Top20的ISATAP服务器出现过的IPv6地址总计9994,占全部 ISATAP隧道接入的 99.4%。

6to4隧道方式
    6to4隧道方式获取的IPv6地址格式为:2002:IPv4ADDR::/48 (IPv4ADDR即隧道端点的IPv4源地址,常见形式为xxxx:xxxx,是由32位IPv4源地址a.b.c.d转化而来的32位16进制表 示)。我们统计下来出现过2,815个6to4隧道IPv6地址,占分析样本所有地址的2.2%。
我们编写程序对这些地址进行了转换,得到了对应的2773个IPv4地址,再使用网上流行的纯真(CZ88)IP地址库对这些IPv4地址全部做了地域反查然后归类分析,得到结果如下表:

表2. 6to4服务活跃程度排名 Top10
排序   来源   IPv4地址数  
1   山东大学   1244  
2   重庆大学   366  
3   中科院   345  
4   兰州大学   340  
5   网通   120  
6   电信   101  
7   上海交通大学   54  
8   教育网直通车   29  
9   江苏工业学院   11  
10   东北大学   9  

    从表2中我们可以看出大学和科研院所还是使用6to4隧道的主力。需要特别说明的是,6to4并非是IPv6的主流接入方式,很多用户可能只是在安装了 IPv6协议以后,从微软的隧道服务器自动获取到的IPv6地址。在这张表里排名靠前的学校,安装IPv6协议的用户数相对较多。Top10的6to4活 跃用户总计2619,占全部使用6to4隧道接入方式的94.4%。

支持IPv6的Proxy
    通过对同一个IPv6地址的出现次数以及用户浏览器代理的关联分析,我们发现了唯一的一个IPv6地址(2001:638:902:1::11),这个地 址在所有的日志中出现了30,420次,占3.75%。通过分析来自这个IP的日志,得到了541个不同的User-Agent。如果操作系统和使用的浏 览器程序不变,一般用户访问时日志记录的User-Agent是不变的。在我们这次分析的包含129,236个IPv6地址的日志样本中,不重复的 User-Agent也只有3292个。那么说明最少有541个用户使用了这个代理服务器(由于不同用户的访问User-Agent信息可能相同,所以实 际数目可能远远超过这个数字)来访问video6网站。对这个IPv6地址反解出来的域名为 proxy.ipv6.uni-leipzig.de,是由德国莱比锡大学提供的IPv6 http 和 ftp proxy,这也是在IPv6网络上广泛使用的一个知名代理服务器。

Native IPv6方式
    剩下来的IPv6地址我们认为是Native IPv6接入。这些IPv6地址有116,364个,占分析样本所有地址的90%。我们将这些IPv6地址和对应学校或单位做了区域映射并分类统计,最终得到下表:
表3. Native IP 活跃地区排行Top25
排序   Prefix(48bit):   使用者    活跃IP  
1   2001:CC0:2020   中科院研究生院   24318  
2   2001:DA8:7000   山东大学   23479  
3   2001:DA8:224   中国政法大学   21679  
4   2001:DA8:216   北京工业大学   15622  
5   2001:DA8:7001   山东大学齐鲁软件学院   6368  
6   2001:DA8:215   北京邮电大学   4078  
7   2001:DA8:C000   兰州大学   2416  
8   2001:DA8:200   清华大学   2262  
9   2001:250:217   中国传媒大学   2007  
10   2001:DA8:D800   中国科技大学   1644  
11   2001:DA8:211   北京林业大学   1385  
12   2001:250:1804   华南理工大学   1378  
13   2001:DA8:E000   浙江大学   1210  
14   2001:DA8:207   北京师范大学   1039  
15   2001:DA8:7005   济南大学    911  
16   2001:250:1401   兰州理工大学   685  
17   2001:256:100   3Tnet网   591  
18   2001:DA8:201   北京大学   389  
19   2001:DA8:C803   西南大学   380  
20   2001:250:2009   四川西华大学   332  
21   2001:250:1999   华南理工大学   311  
23   2001:DA8:1002   东南大学   281  
24   2001:DA8:21C   中国人民大学   277  
25   2001:CC0:201C   中科院   206  

   可以看出,高校和科研单位是Native IPv6的主要使用者。各学校使用普及情况非常不平衡,Top25的学校或单位使用的IPv6地址数为113,248,占全部Native IPv6接入的97.3%,其他高校IPv6的普及推广情况可想而知,不容乐观。我们通常公认的校园网基础建设比较好的学校,IPv6的使用情况也并没有 想象的那么好。但是在部分地区,IPv6还是有相当程度的使用量,这些都值得我们关注和思考。
   有一点需要特别指出,出于安全性考虑, Windows操作系统里使用自动配置获得的Native IPv6地址会随着时间的增加而自动改变,因此同一用户在不同时间段内访问video6网站,日志里记录的用户IPv6地址可能是不同的。由于我们暂时无 法分离出这些重复用户,这给我们的分析带来一定程度的误差。在表3排名靠前的学校里,实际使用的用户并没有列出的IP地址那么多,而只是从一个侧面表明其 使用人数和使用频率相对较高。
   用户浏览器和操作系统分析
   由于使用IPv6代理的用户无法精确统计其信息,我们过滤了来自Proxy的所有日志记录。因为用户可能会多次访问video6网站,在日志里就会留下 不同时段来自同一个用户的访问纪录。为了避免重复统计,因此在下面的分析中,我们认为一个IPv6地址仅代表一个用户,以下内容分析样本中一个IPv6地 址只会出现一次。虽然IPv6网络里不存在NAT等因素引起一个IP对应多个用户的现象,但是实际情况存在有一个用户对应多个IPv6地址的情况,所以下 面的分析不可避免的存在有一些误差。.
   4.1 客户端浏览器的统计
   我们首先对客户端浏览器做了统计,其分布如表4。
表 4. 浏览器使用比例图
浏览器   独立 IP 数    百分比  
IE 6.0   77986   59.1%  
IE 7.0   45903   34.8%  
Firefox 2.0   6227   4.7%  
Opera    980   0.74%  
Firefox 3.0   471   0.36%  
Firefox 1.0/1.5   271   0.21%  
IE 8.0   89   0.07%  
Safari   58   0.04%  
  
   可以看出绝大部分用户(94.6%)都是使用IE或其内核浏览器来访问video6网站,这也意味着大部分人都选择使用Windows平台。
     4.2 客户端操作系统的统计
     从日志的User-Agent信息里可以获取用户的操作系统信息,其分布见下表:
表5. 操作系统分布比例图
操作系统    独立 IP 数    百分比   
Windows XP    119897   92.7%  
Windows Vista    9013   6.97%  
Linux    186   0.14%  
Windows 2003    154   0.12%  
Windows 2000    61   0.05%  
Macintosh    12   0.009%  
  
   可以看出,由于Windows XP对IPv6的良好支持,大部分用户都选择了使用这种操作系统来访问video6网站,Vista由于内置了IPv6协议,也有相当部分的用户使用,选择其他操作系统的用户非常少。  
   总结
    十年前,中国教育和科研计算机网就已加入IPv6试验网6 Bone,今年CERNET2的建设也即将步入第五个年头。管中窥豹,可见一斑,从我们这份简单的日志分析报告来看,国内大部分地区IPv6推广普及工作 还任重道远,缺少应用支撑的IPv6网络难以得到广大网络管理者和普通用户的关注。随着今年CERNET2驻地网建设项目的实施,接入院校和单位会越来越 多,但网络服务的投入却远远跟不上这张网的建设速度。“Content is King”,如果所有人都能深刻理解到这一点,IPv6未来真正融入我们的生活也许才不是一个梦想。

052010

关于爱情:
不要认为后面还有更好的,因为现在拥有的就是最好的。不要认为还年轻可以晚些结婚,爱情是不等年龄的。不要因为距离太远而放弃,爱情可以和你一起坐火车的 。不要因为对方不富裕而放弃,只要不是无能的人,勤劳可以让你们富裕的。不要因为父母反对而放弃,你会发现因为这个原因而反放弃的爱情,将是你一生的悔恨。其实对于爱情,越单纯越幸福。一生只谈一次恋爱是最好的,经历的太多了,会麻木;分离多了,会习惯;换恋人多了,会比较;到最后,你不会再相信爱情;你会自暴自弃;你会行尸走肉;你会与你不爱的人结婚,就这样过一辈子。

也许爱情是一部忧伤的童话,惟其遥远与真实。放弃一个爱你的人并不痛苦,放弃一个你爱的人那才痛苦。若是有缘时间空间都不是距离,若是无缘总是相聚也无法合意;凡事不必太在意,更不需去强求,就让一切随缘。逃避不一定躲得过;面对不一定最难过;孤独不一定不快乐;得到不一定长久;失去不一定不再拥有。爱是一种享受,即使痛苦也会觉得幸福;爱是一种体会,即使心碎也会觉得甜蜜;爱是一种经历,即使破碎也会觉得美丽;不要因为寂寞而错爱,不要因为错爱而寂寞一生。

关于伴侣:
伴侣不是结婚时发誓非你不娶或非你不嫁的那个人,而是发现你身上有许多缺点仍然选择你的那个人;伴侣不是生活中你爱吃黄瓜ta也爱吃黄瓜的那个人,而是你吃蛋清ta吃蛋黄的那个人;伴侣不是天黑了和你一起手挽手走进饭店的那个人,而是守在门口巴望你回来共进晚餐的那个人;伴侣不是和你大谈爱情,把“我爱你”挂在嘴边的那个人,而是和你平淡的唠叨柴米油盐、锅碗瓢盆的那个人。在幸福的婚姻中,伴侣已不是一个具体的人,而是你和ta在几十年的岁月中沉淀下来的:一份默契、一份温情、一份平淡、一份理解、一份宽容。爱ta就要让ra开心,这就是伴侣……..

关于承诺:
在古希腊传说中,情侣都将戒指套在对方的中指上,因为他们相信那儿有一根血管直通心脏。所以戒指的意思就是用心承诺!但是人世间有多少爱能生死白头,又有多少的情可以天长地久?所以你选择共度一生得未必是你最爱的,你最爱的未必能和你共度一生。多少的有情人走不进彼此的今生,只能苦苦的相约于来世;而多少的男男女女走过爱情走进婚姻却不会再珍惜彼此的付出。所以记得珍惜你爱的人,把每一个平淡的今天当成是彼此相依的最后一刻,好好握紧爱人的手,即使ta容颜已老,即使ta满面沧桑,那也是你记忆中永恒的温馨。别忘了守住对ta的承诺,别忘了牵住ta的手,一生一世一辈子…..

关于人生:
人生如梦,岁月无情。蓦然回首,才发现人活着是一种心情。穷也好,富也好,得也好,失也好。一切都是过眼云烟。想想,不管昨天、今天、明天,能豁然开朗就是美好的一天。不管亲情、友情、爱情,能永远珍惜就是好心情。记得有一个经典短信这样写着:曾经拥有的不要忘记;已经得到的更加珍惜;属于自己的不要放弃;已经失去的留作回忆;想要得到的一定要努力;累了把心靠岸;选择了就不要后悔;苦了才懂得满足;痛了才享受生活;伤了才明白坚强;总有起风的清晨;总有绚烂的黄昏;总有流星的夜晚。人生就像一张有去无回的单程车票,没有彩排,每一场都是现场直播。把握好每次演出便是对人生最好的珍惜。把握现在,畅享人生!

关于友情:
有一天,友情和爱情碰见。爱情问友情:世上有我了,为什么还要有你的存在?友情笑着说:爱情会让人们流泪,而友情的存在就是帮人们擦干眼泪!朋友就是:偶尔会为你担心、向你关心、替你?心、想你开心、逗你开心、请你放心。朋友之间,懂得关怀才是难得…..伤心时不妨和我说;痛苦时别忘了跟我讲;有病时别忘了通知我;困难时记得要请教我;失望时要想起还有我;开心时更不要忘记我。朋友的定义,就在于此…..我们是朋友,这就够了…….

关于微笑:
被人误解的时候能微微的一笑,这是一种素养;受委屈的时候能坦然的一笑,这是一种大度;吃亏的时候能开心的一笑,这是一种豁达;处窘境的时候能自嘲的一笑,这是一种智慧;无奈的时候能达观的一笑,这是一种境界;危难的时候能泰然一笑,这是一种大气;被轻蔑的时候能平静的一笑,这是一种自信;失恋的时候能轻轻的一笑,这是一种洒脱。不管是有什么事情,为了什么原因…..我们每天都要开心一笑………..

关于生活:
日出东海落西山,愁也一天,喜也一天;遇事不钻牛角尖,人也舒坦,心也舒坦;每天领取谋生钱,多也喜欢,少也喜欢;少荤多素日三餐,粗也香甜,细也香甜;新旧衣服不挑捡,好也御寒,赖也御寒;常与知己聊聊天,古也谈谈,今也谈谈;全家老少互慰勉,贫也相安,富也相安。

关于幸福:
相传幸福是个美丽的玻璃球,跌碎散落在世间的每个角落。有的人捡到多些,有的人捡到少些,却没有人能拥有全部。爱你所爱选你所选,珍惜现在所拥有的一切。人活着就是一种心情,把握今天,设置明天,储存永远。只要用心感受,幸福就会永远存在。

———————————————————————————————————————————————

人总是对自己拥有的东西不珍惜,直到不再拥有时才会加倍怀念,而在得知自己快失去自己所拥有的东西而又无能为力时,就寻死觅活地不肯放手,歇斯底里往往发生在这个时候,而对于生命的执著确实是到死才放手!!

262010

六维空间(东北大学IPv6 BT下载站,http://bt.neu6.edu.cn)是由东北大学网络中心开发维护,基于纯IPv6协议访问,提供P2P资源索引类的网站,六维空间这个站名正是由“v6”的谐音变换而来。目前六维空间注册用户数33000多人,网站最高在线1700多人,平均日发帖量20000余篇,平均在线种子数40000左右。

六维空间的前世今生

六维空间的前身是东北大学BT下载站,基于IPv4协议为校园网用户提供校内BT下载服务。使用Linux操作系统,PHP语言编写种子索引页,用MySQL数据库来保存种子相关信息,Apache作为索引页的Web服务器,Tracker服务器端软件使用的Python语言编写的BitTorrent。

2008年初,鉴于当前IPv6网络使用的优惠政策,同时为了提高东北大学校园网IPv6的使用率,我们计划将原面向IPv4用户服务的东北大学BT下载站迁移至IPv6网络,建立为IPv6用户服务的东北大学IPv6 BT下载站。

2008年9月,东北大学IPv6 BT下载站开站,东北大学BT下载站成功从IPv4网络迁移至IPv6网络,开始为IPv6用户提供BT下载服务。

2009年2月,由于网站发展的需要,东北大学IPv6 BT下载站更名为六维空间 – 东北大学IPv6 BT下载站,简称六维空间。

迁移中的问题

东北大学BT下载站迁移前后网站架构图如图2所示,左边是IPv4 BT下载站的架构,右边是IPv6 BT下载站的架构。

图2 东北大学BT下载站迁移前后网站架构

在之前的网站架构中,我们使用Apache作为Web服务器发布资源索引,并使Tracker服务器直接对外提供服务。在新的架构中,我们将Web服务器更换为轻量级的Lighttpd,以FastCGI方式运行PHP,使服务器更节省资源,支持更高的负载。同时在原Tracker服务器前端放置Nginx作为Tracker服务器的反向代理,便于今后为Tracker服务器做水平分布扩展。

1.实现Lighttpd支持IPv6
Lighttpd是一个专门为高性能网站提供安全、快速、兼容性好并且灵活的Web Server环境。具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点。默认情况下Lighttpd监听在0.0.0.0:80,也就是说只监听IPv4端口,不监听IPv6的端口Lighttpd的配置文件lighttpd/lighttpd.conf默认并不提供IPv6配置选项。
我们可以通过修改配置文件,增加IPv6相关配置以实现Lighttpd支持IPv6,打开Lighttpd的配置文件lighttpd/lighttpd.conf,在适当的位置加入一条配置语句:server.use-ipv6 = “enable”。之后重新启动Lighttpd,会发现他现在已经监听在:::80了,说明支持IPv6的访问了。

2.使用Nginx支持IPv6
Nginx是一个轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。在0.7.36之前,Nginx还不支持监听IPv6端口,在0.7.36版本里,Nginx的HTTP模块加入了IPv6的支持,开始支持监听IPv6端口,允许IPv6的访问。
使Nginx支持IPv6不如Lighttpd那么方便,需要重新编译Nginx的代码,并在编译配置选项中加入:“–with-ipv6”以支持IPv6。编译安装完成后,还需将原配置文件listen部分配置为IPv6的地址:“listen [::]:6969;”。然后重新启动Nginx。

3.修改索引页与Tracker代码
IPv6的地址与IPv4的地址相比,在长度上,以及地址格式上都不一样,虽然IP索引页与Tracker代码属于应用层的范围,不属于网络层,但其中许多代码写法与IPv4地址有关。
例如代码中的用户来源地址合法性验证、安全审核、日志记录等涉及到IPv4地址格式的代码,需一一修改,使他们支持IPv6的地址长度与地址格式。

4.使用uTorrent作为BT客户端
由于目前在IPv4网络中流行的迅雷、BitComet、FlashGet等下载软件不支持IPv6,因此我们建议用户使用支持IPv6网络的uTorrent作为BT下载客户端。

了解用户行为

1.用户来源分析
通过对用户来源地区来源进行统计,得到图3的结果。

图3 用户来源地区统计

可以看到北京地区的IPv6用户占将近一半。并且几乎没有用户是通过搜索引擎搜索访问到六维空间的,可能与当前搜索引擎的机器人不支持IPv6网络有关。因此对于IPv6网络服务的推广使用SEO是没有什么效果的,还需要依靠其他的宣传手段。

2.操作系统使用统计
由于Windows Vista系统可以直接支持IPv6,而Windows XP、Windows 2000等操作系统需要手动安装IPv6协议,因此我们也针对用户所使用的操作系统做了一个统计。如图4。

图4 用户使用的操作系统统计

可以看到Windows XP用户还是占据了很大比例,因此如何能让Windows XP用户更方便地安装IPv6协议,也是我们在推广IPv6网络过程中应该考虑的一项内容。

3.用户行为分析
通过分析用户访问的页面,我们观察到用户使用六维空间主要是分享资源,特别是电影,电视等媒体资源,由于IPv6网络当前的优惠政策,使其较IPv4网络在P2P共享电影,电视等媒体资源方面有很大的优势。

迁移后的思考

在东北大学IPv6 BT下载站从IPv4向IPv6迁移过程中,我们并没有让Tracker服务器直接对外提供服务,而是使用Nginx作为Tracker服务器的前端反向代理服务器,使Nginx起到为Tracker服务器做负载均衡的效果。这种架构模式中,只要Nginx支持IPv6就可以,而不需要关心Tracker服务器与Nginx之间以何种通信方式通信,对用户都是透明不可见的。换句话说,Nginx与Tracker服务器之间也可以通过IPv4协议来通信。

对于目前许多成熟的、却尚未支持IPv6的IPv4应用来说,如果可以使用一些通用的Porxy程序,或者是其他一些地址转换技术,使这些IPv4下的应用迅速地迁移至IPv6网络中来,加速IPv6网络的推广。

1/12/2010 03:00:00 PM

Like many other well-known organizations, we face cyber attacks of varying degrees on a regular basis. In mid-December, we detected a highly sophisticated and targeted attack on our corporate infrastructure originating from China that resulted in the theft of intellectual property from Google. However, it soon became clear that what at first appeared to be solely a security incident–albeit a significant one–was something quite different.

First, this attack was not just on Google. As part of our investigation we have discovered that at least twenty other large companies from a wide range of businesses–including the Internet, finance, technology, media and chemical sectors–have been similarly targeted. We are currently in the process of notifying those companies, and we are also working with the relevant U.S. authorities.

Second, we have evidence to suggest that a primary goal of the attackers was accessing the Gmail accounts of Chinese human rights activists. Based on our investigation to date we believe their attack did not achieve that objective. Only two Gmail accounts appear to have been accessed, and that activity was limited to account information (such as the date the account was created) and subject line, rather than the content of emails themselves.

Third, as part of this investigation but independent of the attack on Google, we have discovered that the accounts of dozens of U.S.-, China- and Europe-based Gmail users who are advocates of human rights in China appear to have been routinely accessed by third parties. These accounts have not been accessed through any security breach at Google, but most likely via phishing scams or malware placed on the users’ computers.

We have already used information gained from this attack to make infrastructure and architectural improvements that enhance security for Google and for our users. In terms of individual users, we would advise people to deploy reputable anti-virus and anti-spyware programs on their computers, to install patches for their operating systems and to update their web browsers. Always be cautious when clicking on links appearing in instant messages and emails, or when asked to share personal information like passwords online. You can read more here about our cyber-security recommendations. People wanting to learn more about these kinds of attacks can read this U.S. government report (PDF), Nart Villeneuve’s blog and this presentation on the GhostNet spying incident.

We have taken the unusual step of sharing information about these attacks with a broad audience not just because of the security and human rights implications of what we have unearthed, but also because this information goes to the heart of a much bigger global debate about freedom of speech. In the last two decades, China’s economic reform programs and its citizens’ entrepreneurial flair have lifted hundreds of millions of Chinese people out of poverty. Indeed, this great nation is at the heart of much economic progress and development in the world today.

We launched Google.cn in January 2006 in the belief that the benefits of increased access to information for people in China and a more open Internet outweighed our discomfort in agreeing to censor some results. At the time we made clear that “we will carefully monitor conditions in China, including new laws and other restrictions on our services. If we determine that we are unable to achieve the objectives outlined we will not hesitate to reconsider our approach to China.”

These attacks and the surveillance they have uncovered–combined with the attempts over the past year to further limit free speech on the web–have led us to conclude that we should review the feasibility of our business operations in China. We have decided we are no longer willing to continue censoring our results on Google.cn, and so over the next few weeks we will be discussing with the Chinese government the basis on which we could operate an unfiltered search engine within the law, if at all. We recognize that this may well mean having to shut down Google.cn, and potentially our offices in China.

The decision to review our business operations in China has been incredibly hard, and we know that it will have potentially far-reaching consequences. We want to make clear that this move was driven by our executives in the United States, without the knowledge or involvement of our employees in China who have worked incredibly hard to make Google.cn the success it is today. We are committed to working responsibly to resolve the very difficult issues raised.

Posted by David Drummond, SVP, Corporate Development and Chief Legal Officer

附录:读者Jason Liu翻译的Google官方博客文章:A new approach to China

像 很多知名的公 司一样,我们每天都在遭受着或多或少不同程度的网络攻击.在12月中旬,我们监测到了一个从中国来的对google网络基础架构的高智能的目标明确的攻 击,其目的是为了盗取google的技术资源.这个一开始被我们仅仅当成是一个重大安全事故的独立事件其实是另有来头的.

第一,这次攻击不仅仅针对google.我们的调查显示至少有20家大的公司,行业领域包括互联网,金融,科技,传媒,化工,都遭受了相似的攻击。我们正在通知这些公司,而且我们正在与美国相关领域的专家进行合作.

第 二.我们有证据显示这些黑客的主要目标是获取中国人权活动家(Chinese human rigths activists)们的gmail账号信息.调查显示这些黑客并没有达到他们的目的。只有两个账户似乎被侵入,但是仅得到了账户的一般信息(比如说账户 是何时建立的)和邮件的标题,并没有得到邮件的内容。

第三,作为这次调查的另一部分,我们发现很多个在中国,美国,欧 洲致力于中国人权发展的用户的gmail账户经常被第三方人士查阅.这些第三方人士并不是通过google的安全漏洞来获取gmail信息的,而是通过网 络钓鱼和在用户的计算机上运行恶意软件的方法来获取用户的gmail邮件信息.

我们已经通过这次攻击所收集到的信息对 我们的架构做出了修正以提升google和我们用户的安全。对于个人用户来说,我们推荐用户安装知名的杀毒软件和反间谍程序,为自己的操作系统打上最新的 补丁,升级自己的浏览器,始终小心处理im和email中的链接,在网络上被要求告知个人信息比如密码时保持警惕。你可以通过这里获取我们关于网络安全的 建议。希望了解关于这些网络攻击的种类的人可以阅读这份美国政府报告(pdf), Nart Villeneuve 的blog 还有这份这份关于ghostnet间谍事件的介绍(wiki上有介绍,跟咱中国又有关系).

我 们已经采取了非常规的手段–与广大的相关人士交流这次攻击的信息,这样做不仅仅是因为这次事件中我们发掘出来的安全和人权问题,更重要的是这件事的 核心其实是全世界关于言论自由的讨论.在过去的20年中,中国的经济改革和人民的商业头脑使中国数以亿计的中国人脱离了贫困.在当今世界,这个巨大的国家 是整个世界经济发展的中心。

我们在2006年的1月成立了google中国。我们相信与我们必须忍受中国政府的某些内容审查而遭受到的不快相比,无疑让中国人接触到更多的信息和创造一个更加开放的互联网络是更为重要的事情。在当时我们确定了“我们将一直小心关注中国的情况,包括新出台的法律和其他政策制度对我们服务的限制。如果我们认为我们没有能力达到我们提出的目标(指创建一个更加开放的互联网络),我们将会毫不犹豫的考虑是否撤出中国市场”。

这 些攻击和审查,同时考虑到这些年对网络上子自由言论的限制,让我们觉得我们应该重新审视我们在中国业务的可行性.我们不愿意再继续忍受对我们 google.cn上内容的审查,接下来的几个星期内我们将会与中国政府讨论有关我们是否能够在法律允许的范围内运行一个没有审查和过滤的搜索引擎的可能 性。如果失败的话,这久可能意味着我们将要关闭google.cn,以及google中国。

做出这样一个决定是非常困难的一件事,而且我们明白这将会造成深远的后果。有一点要说清楚,这样的决策是由在美国的主管人员们所做出的,并没有到目前为止辛勤工作使google中国如此成功的中国部分员工的参与。我们将会负责任的解决这个棘手的问题。

David Drummond, 企业发展部高级副总裁 首席法务官

计算Google PageRank的php代码

Posted by 冰河 at 21:52 No Responses » 13,493 Views
十二 182009

可以方便调用。这段代码在windows和linux下都能用。

<?php
class PageRank
{
//settings – host and user agent
var $googlehost='www.google.com';
var $googleua='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5';
//convert a string to a 32-bit integer
function StrToNum($Str, $Check, $Magic) {
    $Int32Unit = 4294967296;  // 2^32
    $length = strlen($Str);
    for ($i = 0; $i < $length; $i++) {
        $Check *= $Magic;    
        //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31),
        //  the result of converting to integer is undefined
        //  refer to http://www.php.net/manual/en/language.types.integer.php
        if ($Check >= $Int32Unit) {
            $Check = ($Check – $Int32Unit * (int) ($Check / $Int32Unit));
            //if the check less than -2^31
            $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
        }
        $Check += ord($Str{$i});
    }
    return $Check;
}
//genearate a hash for a url
function HashURL($String) {
    $Check1 = $this->StrToNum($String, 0×1505, 0×21);
    $Check2 = $this->StrToNum($String, 0, 0x1003F);
    $Check1 >>= 2;    
    $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
    $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
    $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);   
    $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
    $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
    return ($T1 | $T2);
}
//genearate a checksum for the hash string
function CheckHash($Hashnum) {
    $CheckByte = 0;
    $Flag = 0;
    $HashStr = sprintf('%u', $Hashnum) ;
    $length = strlen($HashStr);
    for ($i = $length – 1;  $i >= 0;  $i –) {
        $Re = $HashStr{$i};
        if (1 === ($Flag % 2)) {             
            $Re += $Re;    
            $Re = (int)($Re / 10) + ($Re % 10);
        }
        $CheckByte += $Re;
        $Flag ++;   
    }
    $CheckByte %= 10;
    if (0 !== $CheckByte) {
        $CheckByte = 10 – $CheckByte;
        if (1 === ($Flag % 2) ) {
            if (1 === ($CheckByte % 2)) {
                $CheckByte += 9;
            }
            $CheckByte >>= 1;
        }
    }
    return '7'.$CheckByte.$HashStr;
}
//return the pagerank checksum hash
function getch($url) { return $this->CheckHash($this->HashURL($url)); }
//return the pagerank figure
function getrank($url)
{
    $urlinfo=parse_url($url);
    $start=$urlinfo["scheme"]<>""?strlen($urlinfo["scheme"]."://"):0;
    $url=substr($url,$start);
    $pr = -1;    // default return
    $ch = $this->getch($url);
    $fp = fsockopen("www.google.com", 80, $errno, $errstr, 30);
    if ($fp) {
       $out = "GET /search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url HTTP/1.1
";
       //echo "<pre>$out</pre>"; //debug only
       $out .= "User-Agent: {$this->googleua}
";
       $out .= "Host: www.google.com
";
       $out .= "Connection: Close

";
       fwrite($fp, $out); 
       //$pagerank = substr(fgets($fp, 128), 4); //debug only
       //echo $pagerank; //debug only
       while (!feof($fp)) {
            $data = fgets($fp, 128);
            //echo $data;
            $pos = strpos($data, "Rank_");
            if($pos === false){} else{
                $pr=substr($data, $pos + 9);
                $pr=trim($pr);
                $pr=str_replace("",'',$pr);
                return $pr;
            }
       }
       //else { echo "$errstr ($errno)<br />"; } //debug only
       fclose($fp);
    }
    return $pr;
    }
}
//$gpr = new PageRank();
//echo $gpr->printrank("http://www.baidu.com/");
?>

Nginx多站点设置

Posted by 冰河 at 21:51 1 Response » 36,310 Views
十二 182009

方法一:多个.conf方法(优点是灵活,缺点就是站点比较多配置起来麻烦)

这里以配置2个站点(2个域名)为例,n 个站点可以相应增加调整,假设:

IP地址: 202.55.1.100
域名1 example1.com 放在 /www/example1
域名2 example2.com 放在 /www/example2

配置 nginx virtual hosting 的基本思路和步骤如下:

把2个站点 example1.com, example2.com 放到 nginx 可以访问的目录 /www/
给每个站点分别创建一个 nginx 配置文件 example1.com.conf,example2.com.conf, 并把配置文件放到 /etc/nginx/vhosts/
然后在 /etc/nginx.conf 里面加一句 include 把步骤2创建的配置文件全部包含进来(用 * 号)
重启 nginx

具体过程

下面是具体的配置过程:

1、在 /etc/nginx 下创建 vhosts 目录

mkdir /etc/nginx/vhosts

2、在 /etc/nginx/vhosts/ 里创建一个名字为 example1.com.conf 的文件,把以下内容拷进去

server {
        listen  80;
        server_name  example1.com www. example1.com;

        access_log  /www/access_ example1.log  main;

        location / {
            root   /www/example1.com;
            index  index.php index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ .php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /www/example1.com/$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ /.ht {
            deny  all;
        }
}

3、在 /etc/nginx/vhosts/ 里创建一个名字为 example2.com.conf 的文件,把以下内容拷进去

server {
        listen  80;
        server_name  example2.com www. example2.com;

        access_log  /www/access_ example1.log  main;

        location / {
            root   /www/example2.com;
            index  index.php index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ .php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /www/example2.com/$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ /.ht {
            deny  all;
        }
}

4、打开 /etc/nginix.conf 文件,在相应位置加入 include 把以上2个文件包含进来

user  nginx;
worker_processes  1;

# main server error log
error_log	/var/log/nginx/error.log ;
pid	/var/run/nginx.pid;

events {
	worker_connections  1024;
}

# main server config
http {
	include       mime.types;
	default_type  application/octet-stream;
	log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

	sendfile        on;
	#tcp_nopush     on;
    	#keepalive_timeout  0;
	keepalive_timeout  65;
	gzip  on;

	server {
        	listen         80;
        	server_name     _;
        	access_log      /var/log/nginx/access.log main;
        	server_name_in_redirect  off;
        	location / {
            		root  /usr/share/nginx/html;
            		index index.html;
        	}
	}

    # 包含所有的虚拟主机的配置文件
    include /usr/local/etc/nginx/vhosts/*;
}

5、重启 Nginx

/etc/init.d/nginx restart

方法二:动态目录方法(优点是方便,每个域名对应一个文件夹,缺点是不灵活)

这个简单的方法比起为每一个域名建立一个 vhost.conf 配置文件来讲,只需要在现有的配置文件中增加如下内容:

# Replace this port with the right one for your requirements
# 根据你的需求改变此端口
listen       80;  #could also be 1.2.3.4:80 也可以是1.2.3.4:80的形式
# Multiple hostnames seperated by spaces.  Replace these as well.
# 多个主机名可以用空格隔开,当然这个信息也是需要按照你的需求而改变的。
server_name  star.yourdomain.com *.yourdomain.com http://www.*.yourdomain.com/;
#Alternately: _ *
#或者可以使用:_ * (具体内容参见本维基其他页面)
root /PATH/TO/WEBROOT/$host;
error_page  404              http://yourdomain.com/errors/404.html;
access_log  logs/star.yourdomain.com.access.log;
location / {
root   /PATH/TO/WEBROOT/$host/;
index  index.php;
}
# serve static files directly
# 直接支持静态文件 (从配置上看来不是直接支持啊)
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log        off;
expires           30d;
}
location ~ .php$ {
# By all means use a different server for the fcgi processes if you need to
# 如果需要,你可以为不同的FCGI进程设置不同的服务信息
fastcgi_pass   127.0.0.1:YOURFCGIPORTHERE;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /PATH/TO/WEBROOT/$host/$fastcgi_script_name;
fastcgi_param  QUERY_STRING     $query_string;
fastcgi_param  REQUEST_METHOD   $request_method;
fastcgi_param  CONTENT_TYPE     $content_type;
fastcgi_param  CONTENT_LENGTH   $content_length;
fastcgi_intercept_errors on;
}
location ~ /.ht {
deny  all;
}

最后附另外一个二级域名匹配的方法

绑定域名
server_name *.abcd.com;
获取主机名
if ( $host ~* (.*).(.*).(.*))
{
set $domain $1;
}
定义目录
root html/abc/$domain/;
location /
{
root html/abcd/$domain;
index index.html index.php;

/etc/passwd & /etc/shadow 详解

Posted by 冰河 at 21:50 No Responses » 10,190 Views
十二 182009

1,passwd文件
passwd文件存放在/etc目录下。这个文件存放着所有用户帐号的信息,包括用户名和密码,因此,它对系统来说是至关重要的。可以使用如下命令查看该文件:cat /etc/passwd
Passwd文件由许多条记录组成,每条记录占一行,记录了一个用户帐号的所有信息。每条记录由7个字段组成,字段间用冒号“:”隔开,其格式如下:
username:password:User ID:Group ID:comment:home directory:shell
字段含义:
username 用户名
它唯一地标识了一个用户帐号,用户在登录时使用的就是它。
password 该帐号的口令。passwd文件中存放的密码是经过加密处理的。Linux的加密算法很严密,其中的口令几乎是不可能被破解的。盗用帐号的人一般都借助专门的黑客程序,构造出无数个密码,然后使用同样的加密算法将其加密,再和本字段进行比较,如果相同的话,就代表构造出的口令是正确的。因此,建议不要使用生日、常用单词等作为口令,它们在黑客程序面前几乎是不堪一击的。特别是对那些直接连入较大网络的系统来说,系统安全性显得尤为重要。
User ID 用户识别码,简称UID。Linux系统内部使用UID来标识用户,而不是用户名。UID是一个整数,用户的UID互不相同。
Group ID 用户组识别码,简称GID。不同的用户可以属于同一个用户组,享有该用户组共有的权限。与UID类似,GID唯一地标识了一个用户组。
comment 这是给用户帐号做的注解。它一般是用户真实姓名、电话号码、住址等,当然也可以是空的。
home directory 主目录。这个目录属于该帐号,当用户登录后,它就会被置于此目录中,就像回到家一样。一般来说,root帐号的主目录是/root,其他帐号的家目录都在/home目录下,并且和用户名同名。
login command 用户登录后执行的命令。一般来说,这个命令将启动一个shell程序。例如,用bbs帐号登录后,会直接进入bbs系统,这是因为bbs帐号的login command指向的是bbs程序,等系统登录到bbs时就自动运行这些命令。
系统帐号:系统中还有一些默认的帐号,如daemon、bin等。这些帐号有着特殊的用途,一般用于进行系统管理。这些帐号的口令大部分用(x)号表示,代表它们不能在登录时使用。
2,shadow文件
为了增强系统的安全性,Linux系统还可以为用户提供MD5和Shadow安全密码服务。如果在安装 Linux 时在相关配置的选项上选中了MD5和Shadow服务,那么将看到的/etc/passwd文件里的passwd项上无论是什么用户,都是一个“x”,这就表示这些用户都登录不了;系统其实是把真正的密码数据放在了/etc/shadow文件里。
/etc/shadow文件只能以root身份来浏览。为什么要这样做呢,原因其实很简单,在系统设计的时候,/etc/passwd文件是任何人都可以读的,那么那些心有所图的人就可以利用这个文件,使用各种各样的工具按照Linux密码加密的方法把用户甚至root的密码试出来,这样整个系统就会被他所控制,严重危害系统的安全和用户数据的保密性。
3,有关命令
pwconv
根据/etc/passwd文件生成/etc/shadow。它把所有口令从/etc/passwd移到/etc/shadow中。
pwunconv
将/etc/shadow中的信息尽可能地恢复到/etc/passwd。

© 2009 - 2024 冰河的博客