您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Nginx搭建胜过Apache十倍的Web服务器-第6版
前言:本文是我撰写的关于搭建“Nginx+PHP(FastCGI)”Web服务器的第6篇文章。本系列文章作为国内最早详细介绍Nginx+PHP安装、配置、使用的资料之一,为推动Nginx在国内的发展产生了积极的作用。本文可能不断更新小版本,请记住原文链接“”,获取最新内容。第6篇文章主要介绍了Nginx0.8.x新的平滑重启方式,将PHP升级到了5.2.14,修正了PEAR问题。另将MySQL5.1.x升级到了5.5.x系列,配置文件变更较大。链接:《2007年9月的第1版》、《2007年12月的第2版》、《2008年6月的第3版》、《2008年8月的第4版》、《2009年5月的第5版》Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过三年了。Igor将源代码以类BSD许可证的形式发布。Nginx超越Apache的高性能和稳定性,使得国内使用Nginx作为Web服务器的网站也越来越多,其中包括新浪博客、新浪播客、网易新闻、腾讯网、搜狐博客等门户网站频道,六间房、56.com等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,盛大在线、金山逍遥网等网络游戏网站,豆瓣、人人网、YUPOO相册、金山爱词霸、迅雷在线等新兴Web2.0网站。Nginx的官方中文维基:在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx0.8.46+PHP5.2.14(FastCGI)可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。根据我的经验,4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。而这台Nginx0.8.46+PHP5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。在3万并发连接下,访问Nginx0.8.46+PHP5.2.14(FastCGI)服务器的PHP程序,仍然速度飞快。下图为Nginx的状态监控页面,显示的活动连接数为28457(关于Nginx的监控页配置,会在本文接下来所给出的Nginx配置文件中写明):我生产环境下的两台Nginx+PHP5(FastCGI)服务器,跑多个一般复杂的纯PHP动态程序,单台Nginx+PHP5(FastCGI)服务器跑PHP动态程序的处理能力已经超过“700次请求/秒”,相当于每天可以承受6000万(700*60*60*24=60480000)的访问量(更多信息见此),而服务器的系统负载也不高:2009年9月3日下午2:30,金山游戏《剑侠情缘网络版叁》临时维护1小时(),大量玩家上官网,论坛、评论、客服等动态应用Nginx服务器集群,每台服务器的Nginx活动连接数达到2.8万,这是笔者遇到的Nginx生产环境最高并发值。下面是用100个并发连接分别去压生产环境中同一负载均衡器VIP下、提供相同服务的两台服务器,一台为Nginx,另一台为Apache,Nginx每秒处理的请求数是Apache的两倍多,Nginx服务器的系统负载、CPU使用率远低于Apache:你可以将连接数开到10000~30000,去压Nginx和Apache上的phpinfo.php,这是用浏览器访问Nginx上的phpinfo.php一切正常,而访问Apache服务器的phpinfo.php,则是该页无法显示。4G内存的服务器,即使再优化,Apache也很难在“webbench-c30000-t60”的压力情况下正常访问,而调整参数优化后的Nginx可以。webbench下载地址:注意:webbench做压力测试时,该软件自身也会消耗CPU和内存资源,为了测试准确,请将webbench安装在别的服务器上。测试结果:#####Nginx+PHP#####引用[root@localhostwebbench-1.5]#webbench-c100-t30(c)RadimKolar1997-2004,GPLOpenSourceSoftware.Benchmarking:GET=102450pages/min,16490596bytes/sec.Requests:51225susceed,0failed.top-14:06:13up27days,2:25,2users,loadaverage:14.57,9.89,6.51Tasks:287total,4running,283sleeping,0stopped,0zombieCpu(s):49.9%us,6.7%sy,0.0%ni,41.4%id,1.1%wa,0.1%hi,0.8%siMem:6230016ktotal,2959468kused,3270548kfree,635992kbuffersSwap:2031608ktotal,3696kused,2027912kfree,1231444kcached测试结果:#####Apache+PHP#####引用[root@localhostwebbench-1.5]#webbench-c100-t30(c)RadimKolar1997-2004,GPLOpenSourceSoftware.Benchmarking:GET=42184pages/min,31512914bytes/sec.Requests:21092susceed,0failed.top-14:06:20up27days,2:13,2users,loadaverage:62.15,26.36,13.42Tasks:318total,7running,310sleeping,0stopped,1zombieCpu(s):80.4%us,10.6%sy,0.0%ni,7.9%id,0.1%wa,0.1%hi,0.9%siMem:6230016ktotal,3075948kused,3154068kfree,379896kbuffersSwap:2031608ktotal,12592kused,2019016kfree,1117868kcached为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别:假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版宿管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询I/O是最耗时间的操作之一,select和epoll的性能谁的性能更高,同样十分明了。安装步骤:(系统要求:Linux2.6+内核,本文中的Linux操作系统为CentOS5.3,另在RedHatAS4上也安装成功)一、获取相关开源程序:1、【适用CentOS操作系统】利用CentOSLinux系统自带的yum命令安装、升级所需的程序库(RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包,进行安装):sudo-sLANG=Cyum-yinstallgccgcc-c++autoconflibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develzlibzlib-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-devele2fsprogse2fsprogs-develkrb5krb5-devellibidnlibidn-developensslopenssl-developenldapopenldap-develnss_ldapopenldap-clientsopenldap-servers2、【适用RedHat操作系统】RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包(事先可通过类似“rpm-qa|greplibjpeg”的命令查看所需的RPM包是否存在,通常是“xxx-devel”不存在,需要安装)。RedHat可以直接利用CentOS的RPM包安装,以下是RPM包下载网址:①、RedHatAS4&CentOS4://mirrors.163.com/centos/4/os/x86_64/CentOS/RPMS/②、RedHatAS5&CentOS5://mirrors.163.com/centos/5/os/x86_64/CentOS/③、RPM包搜索网站://④、RedHatAS4系统环境,通常情况下缺少的支持包安装:Ⅰ、i386系统wget://blog.s135.com/soft/linux/nginx_php/rpm/i386/fr
本文标题:Nginx搭建胜过Apache十倍的Web服务器-第6版
链接地址:https://www.777doc.com/doc-4380521 .html