序言

我的网站系统架构之路

我最早接触计算机是在1995年,上小学四年级的时候。当时父亲单位买了一台386计算机(DOS操作系统+UCDOS汉字环境+WPS文字处理软件),用于打字和打印文件。我每天课余时间都会抽空去玩这台计算机,利用DOS中自带的QBASIC语言编写非常简单的小程序,从那时起我就对计算机产生了浓厚的兴趣。之后的几年内,先后接触了Windows 95/98/2000操作系统,并在Windows 98上搭建了PWS个人网站服务器,在Windows 2000上搭建了IIS网站服务器。2000年,初三毕业的那个暑假,我第一次接触互联网,做了自己的第一个纯静态HTML个人主页。高一时,我利用网上提供的免费主页空间,做了一个本地的门户网站。2003年高考结束后的那个假期,我花65元购买了国际域名s135.com、150元购买虚拟主机,创办了一个采用ASP语言开发的国际经济贸易资讯类网站——商资网(现在已关闭)。

2003年,我进入中南民族大学学习。由于高中我学的是文科,填志愿时不能选择计算机类专业,于是我选择了经济学院的国际经济与贸易专业。尽管如此,我对计算机和网络的兴趣依旧不减,开始学习Linux系统和PHP语言。由于具有一些网站制作知识,我进入了经济学院学生会的信息部,开发维护所在院系的网站。之后,又进入了学校党委宣传部下属的网络媒体“民大在线”,从事网站PHP开发与系统运维工作。后来,基于Linux+Apache +MySQL+PHP平台为学校招生就业工作处开发了“就业信息网”,并接触到了IBM高端服务器。接下来的日子,我为学校的多个部门开发、维护网站,为了便于演示网站,我编写了一键搭建Apache+PHP+MySQL服务器平台的软件“APMServ”。最后,我为学校网络中心兼职维护学校的主Web服务器,开发虚拟主机管理平台,接触到了HP刀片服务器和磁盘阵列。学校的兼职工作为我日后工作打下了比较扎实的基础。

2007年1月,大四下学期为实习阶段,我进入新浪网互动社区事业部播客产品部工作。新浪播客于2006年12月20日刚上线,我加入播客团队的时候,它正处于高速发展时期,网站PV快速增长,Apache+PHP动态应用服务器的负载日益增大。而在Web服务器的负载均衡方面,由于一对F5 BIG-IP硬件负载均衡交换机要服务新浪网的多个产品,七层交换须要耗费F5 BIG-IP不少的CPU资源,而F5 BIG-IP四层交换有专门的硬件芯片来处理,耗费的资源较少,所以,在新浪,F5 BIG-IP一般只用四层负载均衡。但是,URL过滤、转发、重定向及添加x-forwarded-for头等功能,只有七层负载均衡才能实现。在这种背景下,我测试了来自俄罗斯的开源Nginx服务器,其并发支持能力高于Apache数倍,处理速度高效快捷、稳定性也极高,于是,在领导的支持下,逐步采用了Nginx+PHP(FastCGI)取代了Apache+PHP服务器,采用Nginx负载均衡代替F5 BIG-IP进行软七层负载均衡,为公司节约了大量的服务器及系统运维开销。我2007年9月开始撰写的《Nginx+PHP(FastCGI)搭建胜过Apache十倍的Web服务器》系列文章,作为国内最早详细介绍Nginx + PHP安装、配置、使用的资料之一,为推动Nginx在国内的发展起到了积极作用。2008年4月~10月在赶集网工作期间,完成赶集网主站所有Web服务器从Apache+PHP到Nginx+PHP的迁移,单台服务器的CPU平均占用率由70%~80%降低到30%~40%,系统负载由11~16降低到2~5。2008年11月至今,我在金山软件网游公司逍遥网担任架构师期间,将Web负载均衡服务器、Web缓存服务器、PHP动态应用服务器集群、Flash FLV视频播放服务器等,全面采用Nginx。2009年9月3日14:30,金山软件刚公测不久的大型3D武侠网游《剑侠情缘网络版叁》临时维护,暂停服务1小时,大量玩家上游戏官网,论坛、评论、客服等动态应用Nginx服务器集群,访问人数比平时峰值激增数倍,每台服务器的Nginx活动连接数达到2.8万,仍然能够正常提供服务,这也是我至今遇到的Nginx生产环境最高并发值。目前,Nginx已经在新浪、搜狐、网易、腾讯等门户网站,以及豆瓣、六间房、酷6网、开心网、人人网、YUPOO相册、迅雷看看、金山逍遥网、金山爱词霸等Web 2.0网站得到广泛应用,越来越受到大家的喜爱。

撰写本书的背景

近期,新浪、搜狐、网易、腾讯、金山、TOM、中华网、赛尔网络、上海九城等知名互联网公司的系统工程师、网络工程师招聘信息中,都加上了一条对Nginx配置管理经验的要求。Nginx作为新兴的Web服务器,目前的发展势头迅猛,已经在众多知名网站的各项产品中取代Apache。但是,Nginx相关的中文资料却比较欠缺,目前还没有关于Nginx服务器的任何书籍,这也使得一些朋友对于是否采用Nginx取代Apache犹豫不决。本书就是为对Nginx服务器实践应用感兴趣的读者准备的,适用于以前没有接触过Nginx,或者对Nginx有一些了解并希望能够进一步深入,以及对Nginx有较多研究,希望共同探讨的专业系统工程师、个人网站站长及一切Linux/Unix从业人员。

本书的主要内容

Nginx(“engine x”)是俄罗斯人Igor Sysoev编写的一款高性能的HTTP和反向代理服务器。Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。

本书主要分为4个部分,第1部分为基础篇,介绍了Nginx服务器的安装与配置方法;第2部分为进阶篇,重点介绍了Nginx的配置优化方法、Nginx与PHP/JSP/ASP.NET/Perl的结合配置方法、Nginx HTTP反向代理与负载均衡的配置与优化、Nginx的Rewrite规则、Nginx的Web缓存服务、Nginx模块开发等,最后还分析了新浪的开源软件项目──基于Nginx的NCACHE网页缓存系统;第3部分为实战篇,分析了Nginx在国内知名网站(如新浪播客、金山逍遥网等)中的应用案例,以及Nginx在Flash FLV视频点播、小内存VPS服务器上的优化等内容;第4部分为模块篇,对Nginx的各项模块进行了集中介绍,可以作为参考手册来翻阅。

致谢

在本书的编写过程中,得到了家人、同事和朋友的大力支持,在此我表示由衷的感谢。感谢老婆对我的支持与鼓励,感谢余建煊、李静、张鹏翼等朋友为本书作序,以及给予的帮助。感谢前新浪播客刘博、郑宇、姜源、李雅敏、宋健等朋友,以及现在金山逍遥网技术支持部所有同事在研究Nginx及日常工作中给我的支持与帮助。此外,还要感谢吴捷(第九城市)及不知名的网友给予的意见和建议。

最后,要感谢在本书的编写过程中,博文视点的徐定翔、白爱萍、陈元玉等编辑给予的帮助与支持。

示例代码下载

如果您需要书中的示例代码,请移步至:

http://blog.s135.com/book/nginx/code/

作者联系方式

由于自身能力有限,书中难免存在错误与疏漏,如果读者发现哪儿存在错误,或者有什么想法和意见想交流,可以通过E-mail或博客留言,与我联系。

个人博客:http://blog.s135.com

E-mail:net@s135.com

张宴

北京金山软件 金山游戏(KSG)-逍遥网 系统架构师

2010年1月