`
isiqi
  • 浏览: 16466110 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[转]

阅读更多
  [文章作者:张宴 本文版本:v6.3 最后修改:2010.07.26转载请注明原文链接:http://blog.s135.com/nginx_php_v6/]

  前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第6篇文章。本系列文章作为国内最早详细介绍 Nginx + PHP 安装、配置、使用的资料之一,为推动 Nginx 在国内的发展产生了积极的作用。本文可能不断更新小版本,请记住原文链接“http://blog.s135.com/nginx_php_v6/”,获取最新内容。第6篇文章主要介绍了Nginx 0.8.x新的平滑重启方式,将PHP升级到了5.2.14,修正了PEAR问题。另将MySQL 5.1.x升级到了5.5.x系列,配置文件变更较大。

  链接:《2007年9月的第1版》、《2007年12月的第2版》、《2008年6月的第3版》、《2008年8月的第4版》、《2009年5月的第5版

  点击在新窗口中浏览此图片

  Nginx("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过三年了。Igor 将源代码以类BSD许可证的形式发布。

  Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括新浪博客新浪播客网易新闻腾讯网搜狐博客等门户网站频道,六间房56.com等视频分享网站,Discuz!官方论坛水木社区等知名论坛,盛大在线金山逍遥网等网络游戏网站,豆瓣人人网YUPOO相册金山爱词霸迅雷在线等新兴Web 2.0网站。



  Nginx 的官方中文维基:http://wiki.nginx.org/NginxChs



  在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍

  根据我的经验,4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。

  而这台 Nginx 0.8.46 + PHP 5.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万并发连接下,访问Nginx 0.8.46 + PHP 5.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小时(http://kefu.xoyo.com/gonggao/jx3/2009-09-03/750438.shtml),大量玩家上官网,论坛、评论、客服等动态应用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 -c 30000 -t 60http://xxx.xxx.xxx.xxx/phpinfo.php”的压力情况下正常访问,而调整参数优化后的Nginx可以。

  webbench 下载地址:http://blog.s135.com/post/288/

  注意:webbench 做压力测试时,该软件自身也会消耗CPU和内存资源,为了测试准确,请将 webbench 安装在别的服务器上。

  测试结果:##### Nginx + PHP #####
引用
[root@localhost webbench-1.5]# webbench -c 100 -t 30http://192.168.1.21/phpinfo.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GEThttp://192.168.1.21/phpinfo.php
100 clients, running 30 sec.

Speed=102450 pages/min, 16490596 bytes/sec.
Requests: 51225 susceed, 0 failed.

top - 14:06:13 up 27 days,2:25,2 users,load average: 14.57, 9.89, 6.51
Tasks: 287 total, 4 running, 283 sleeping, 0 stopped, 0 zombie
Cpu(s): 49.9% us,6.7% sy,0.0% ni, 41.4% id,1.1% wa,0.1% hi,0.8% si
Mem: 6230016k total,2959468k used,3270548k free, 635992k buffers
Swap:2031608k total, 3696k used,2027912k free,1231444k cached


  测试结果:#####Apache + PHP #####
引用
[root@localhost webbench-1.5]# webbench -c 100 -t 30http://192.168.1.27/phpinfo.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GEThttp://192.168.1.27/phpinfo.php
100 clients, running 30 sec.

Speed=42184 pages/min, 31512914 bytes/sec.
Requests: 21092 susceed, 0 failed.

top - 14:06:20 up 27 days,2:13,2 users,load average: 62.15, 26.36, 13.42
Tasks: 318 total, 7 running, 310 sleeping, 0 stopped, 1 zombie
Cpu(s): 80.4% us, 10.6% sy,0.0% ni,7.9% id,0.1% wa,0.1% hi,0.9% si
Mem: 6230016k total,3075948k used,3154068k free, 379896k buffers
Swap:2031608k total,12592k used,2019016k free,1117868k cached




  为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux 2.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的性能谁的性能更高,同样十分明了。



  安装步骤:
  (系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为CentOS 5.3,另在RedHat AS4上也安装成功)

  一、获取相关开源程序:
  1、【适用CentOS操作系统】利用CentOS Linux系统自带的yum命令安装、升级所需的程序库(RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包,进行安装):
sudo -s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers


  2、【适用RedHat操作系统】RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包(事先可通过类似“rpm -qa | grep libjpeg”的命令查看所需的RPM包是否存在,通常是“xxx-devel”不存在,需要安装)。RedHat可以直接利用CentOS的RPM包安装,以下是RPM包下载网址:
  ①、RedHat AS4 & CentOS 4
  http://mirrors.163.com/centos/4/os/i386/CentOS/RPMS/
  http://mirrors.163.com/centos/4/os/x86_64/CentOS/RPMS/

  ②、RedHat AS5 & CentOS 5
  http://mirrors.163.com/centos/5/os/i386/CentOS/
  http://mirrors.163.com/centos/5/os/x86_64/CentOS/

  ③、RPM包搜索网站
  http://rpm.pbone.net/
  http://www.rpmfind.net/

  ④、RedHat AS4 系统环境,通常情况下缺少的支持包安装:
  Ⅰ、i386 系统

  Ⅱ、x86_64 系统


  3、【适用CentOS、RedHat及其它Linux操作系统】下载程序源码包:
  本文中提到的所有开源软件为截止到2010年07月26日的最新稳定版。
  ①、从软件的官方网站下载:
mkdir -p /data0/software
cd /data0/software
wgethttp://sysoev.ru/nginx/nginx-0.8.46.tar.gz
wgethttp://www.php.net/get/php-5.2.14.tar.gz/from/this/mirror
wgethttp://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz
wgethttp://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.3-m3.tar.gz/from/http://mysql.he.net/
wgethttp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0"
wget "http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0"
wgethttp://pecl.php.net/get/memcache-2.2.5.tgz
wget "http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0"
wgetftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz
wgethttp://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
wgethttp://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wgethttp://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wgethttp://pecl.php.net/get/imagick-2.3.0.tgz

  ②、从blog.s135.com下载(比较稳定,只允许在本站,或者在Linux/Unix下通过Wget、Curl等命令下载以下软件):
mkdir -p /data0/software
cd /data0/software
wgethttp://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.46.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/php/php-5.2.14.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.14-fpm-0.5.14.diff.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.5.3-m3.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.1.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz
wgethttp://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/pcre/pcre-8.10.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.6.1.tar.bz2
wgethttp://blog.s135.com/soft/linux/nginx_php/pdo/PDO_MYSQL-1.0.2.tgz
wgethttp://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wgethttp://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.3.0.tgz
省略。。。
分享到:
评论

相关推荐

    Linux + Nginx 0.8.x + PHP 5.2.14(FastCGI)+ Mysql.doc

    Linux + Nginx 0.8.x + PHP 5.2.14(FastCGI)+ Mysql的组合是一种常见的高性能Web服务器架构,尤其适用于处理高并发请求。这种架构利用了Nginx的反向代理和静态资源处理能力,以及PHP通过FastCGI与Nginx交互来执行...

    Nginx0.7.x+PHP5.2.10(FastCGI)搭建胜过Apache十倍的Web服务器.doc

    【Nginx 0.7.x + PHP5.2.10(FastCGI)搭建胜过Apache十倍的Web服务器】 Nginx是一个高性能的HTTP和反向代理服务器,同时也支持IMAP/POP3/SMTP代理服务。由Igor Sysoev为Rambler.ru站点开发,并以其出色的性能和...

    Centos5.4+Nginx-0.8.50+UWSGI-0.9.6.2+Django-1.2.3搭建高性能WEB服务器

    在本教程中,我们将探讨如何使用CentOS 5.4操作系统,配合Nginx 0.8.50,uWSGI 0.9.6.2和Django 1.2.3来构建高性能的Web服务器。这个组合是基于Python的Web应用程序部署的常见选择,因为它能够提供高速度、稳定性和...

    ngwsx-0.8.49+php

    **标题解析:**"ngwsx-0.8.49+php" 是一个特定版本的软件包,其中 "ngwsx" 可能是针对 Nginx 的一个自定义扩展或修改版,版本号为0.8.49,并且集成了PHP支持。这表明该软件包旨在提供一种在Nginx服务器上处理PHP脚本...

    nginx-0.8.39

    **Nginx 0.8.39:一个高性能Web服务器和反向代理** Nginx 0.8.39 是Nginx Web服务器的一个早期版本,它以其高效的性能、稳定性以及对高并发处理能力而闻名。Nginx是由Igor Sysoev开发的,最初发布于2004年,它的...

    Nginx搭建胜过Apache十倍的Web服务器-第6版.doc

    Nginx 0.8.x引入了新的平滑重启方式,这一功能允许在不中断现有连接的情况下更新配置或进行软件升级,确保了服务的连续性和稳定性。这对于线上服务器的运维非常重要,避免了因重启导致的服务中断。 【Nginx的负载...

    Nginx搭建胜过Apache十倍的Web服务器-第6版.pdf

    【Nginx与Apache对比】 ...总结,Nginx的高性能、低资源消耗以及出色的反向代理和负载均衡能力,使其成为搭建Web服务器的优选,尤其在处理高并发连接和动态内容时,相比于Apache展现出显著的优势。

    构架Nginx+PHP(Fastcgi)+MySQL+Memcache高性能web服务器

    ### 构建Nginx+PHP(Fastcgi)+MySQL+Memcache高性能Web服务器 #### 一、概述 本文档旨在详细介绍如何构建一个基于Nginx、PHP(Fastcgi)、MySQL以及Memcache的高性能Web服务器架构(简称LEMP+Memcache)。此架构充分...

    nginx+apache+mysql+php+memcached+squid搭建门户网站

    ### Nginx+Apache+MySQL+PHP+Memcached+Squid 搭建门户网站 #### 一、前言与架构概述 随着互联网技术的发展,如何构建一个高效、稳定且能够应对高并发访问的Web服务器成为了许多企业和开发者关注的重点。本文将...

    nginx-0.8.30html服务器

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,以其高性能、低内存消耗和模块化设计而著名。在这个场景中,我们关注的是Nginx作为HTML服务器的角色,特别是版本0.8.30。这个版本...

    Nginx + uwsgi + web.py 搭建web服务器

    Nginx + uwsgi + web.py 搭建web服务器, 也包含一整套python服务器后台框架代码,简单方便,容易搭建。

    Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化第1/2页

    对其用户和应用程序来讲,每... 下面,以我的博客所在的VPS为例,介绍在128M内存下对 Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 的优化。 至于 Nginx + PHP + MySQL 的安装配置,可参见:《Nginx 0.7.x + PHP 5.2

    nginx1.8.tar.gz+pcre-8.35.tar.gz

    Nginx是一个高性能的HTTP和反向代理服务器,广泛用于Web服务器领域,以其高效、稳定和易扩展的特点受到开发者和运维人员的青睐。在给定的压缩包文件"nginx1.8.tar.gz+pcre-8.35.tar.gz"中,包含了Nginx的1.8.0版本和...

    Apache2.2.x+Tomcat6.x+jk2.x做集群配置

    Apache2.2.x + Tomcat6.x + jk2.x 集群配置教程 在互联网服务中,为了提供高可用性和负载均衡,通常会采用集群技术。Apache HTTP Server(通常简称为Apache)与Tomcat的结合是常见的Web服务器与应用服务器组合。...

    CentOS5.3+Nginx0.7.57+Postfix+Extmail邮件系统安装配置

    在本文中,我们将深入探讨如何在CentOS 5.3操作系统上配置一套完整的邮件系统,包括Nginx作为Web服务器,Postfix处理SMTP服务,以及Extmail作为邮件系统前端。这个配置还包括其他关键组件,如MySQL数据库存储用户...

    nginx-0.8.31

    **Nginx 0.8.31:高性能Web服务器详解** Nginx是一款轻量级、高性能的Web服务器及反向代理服务器,由伊戈尔·赛索耶夫(Igor Sysoev)开发,首次发布于2004年。在"nginx-0.8.31"这个版本中,我们看到的是Nginx的一...

    Nginx+PHP(FastCGI)搭建高并发WEB服务器(自动安装脚本)第二版

    本文是依照张宴的 Nginx 0.7.x + PHP 5.2.10(FastCGI)搭建胜过Apache十倍的Web服务器(第5版) 编写 原文地址 http://blog.s135.com/nginx_php_v5/ 因为编译过程和等待时间繁琐,于是就自己写了个全自动安装的...

    nginx+apache+mysql+php+memcached+squid搭建集群web环境

    这里使用的是双核Intel Xeon 3.00GHz服务器,2GB内存,CentOS 4.4操作系统,以及一系列预安装的软件版本,如Apache 2.2.3、PHP 5.2.0、eAccelerator 0.9.5、memcache 1.2.0、MySQL 5.0.27、Nginx 0.5.4和Squid 2.6....

Global site tag (gtag.js) - Google Analytics