文档章节

APACHE+PHP vs NGINX+PHP 性能评测(译文)

mac_zhao
 mac_zhao
发布于 2015/06/16 17:21
字数 1417
阅读 1205
收藏 3
点赞 0
评论 0
鉴于论坛里有会员对NGINX、APACHE各自与各自的方式运行PHP的性能有疑问,我从国外转载并翻译一篇文章并在后面发表一点自己的看法,希望对大家有帮助。 
原文: http://blog.a2o.si/2009/06/24/apache-mod_php-compared-to-nginx-php-fpm/ 
 
所 有的软件均从源码编译(详见如下)。压测工具使用APACHE的ApacheBench(ab),下面的结果是在同一台机器上测试的,所有伺服系统 (nginx、apache)均关闭了日志功能(防止对性能的影响),测试过程中keepalive配置的是一次启用、一次禁用,每样测试均测试5遍,然 后取得的平均值。测试的文件如下: 
 
HelloWorld.php – 简短的输出“Hello, World!” (13 bytes)的PHP脚本,用来代表PHP文件测试处理过程的开销,相比的静态文件在下面 
HelloWorld.txt – 一个静态文件,输出“Hello, World!”  (同样13 bytes),用来代表静态文件测试处理过程的开销 
100KB.txt – 一个静态的100KB大小的文件 
1MB.txt –  一个静态的1MB 大小的文件 
index.php – 一个包含多重复杂的处理过程的PHP文件,包括数据库查询、文件缓存读取、模板[编译]处理。 
 
硬件环境 
硬件: HP DL380 G5 
硬件CPU: 2x Intel Xeon E5420 (4 cores each, total of 8 cores) 
硬件内存: 8GB of ECC RAM 
硬件磁盘: Smart Array P400i RAID-1 with 2x 147GB SAS drives 
操作系统: Slackware 12.2 with almost all software compiled from source 
文件系统: ext3 
Apache 版本: 2.2.11, php 由mod_php方式运行 
Nginx 版本: 0.7.59, php 由 php-fpm (通过socket方式运行) 
PHP 版本: 5.2.9 
Eaccelerator 版本: 0.9.5.3 (for both, Apache and Nginx) 
MySQL 版本: 5.0.77 
OpenSSL 版本: 0.9.8k 
服务日志、请求日志均已禁用 
Apache编译选项: 
 
./configure –prefix=/usr/local/$PDESTDIR_HTTPD –sysconfdir=/etc/httpd \ 
–enable-authn-file –enable-authn-default \ 
–enable-authz-host –disable-authz-groupfile –enable-authz-user –enable-authz-default \ 
–enable-auth-basic \ 
–disable-include –disable-filter –disable-charset-lite \ 
–enable-log-config \ 
–enable-env –enable-setenvif \ 
–enable-ssl –with-ssl=/usr/local/openssl-$PVERSION_OPENSSL \ 
–enable-http –enable-mime –enable-status \ 
–disable-autoindex –disable-asis \ 
–enable-info \ 
–enable-cgi –disable-cgid \ 
–enable-vhost-alias \ 
–disable-negotiation \ 
–enable-dir \ 
–disable-actions \ 
–disable-userdir \ 
–enable-info \ 
–enable-rewrite \ 
–enable-so \ 
–with-mpm=prefork 
 
Nginx编译选项: 
 
./configure –prefix=/usr/local/$PDIR \ 
–conf-path=/etc/nginx/nginx.conf \ 
–error-log-path=/var/log/nginx/nginx_error.log \ 
–pid-path=/var/run/nginx.pid \ 
–lock-path=/var/run/nginx.lock \ 
–user=httpd \ 
–group=httpd \ 
–with-openssl=/usr/local/openssl-0.9.8k 
 
PHP编译选项(与APACHE一起运行的MOD_PHP): 
 
—–[These lines are for PHP with Apache (mod_php)]—————- 
./configure –prefix=/usr/local/$PDESTDIR_HTTPD/$PDIR \ 
–with-apxs2=/usr/local/$PDESTDIR_HTTPD/bin/apxs –enable-cli –enable-cgi \ 
–with-config-file-path=/etc/php/httpd \ 
 
与NGINX一起运行的(php-fpm) 
—–[These lines are for PHP with Nginx (php-fpm)]—————- 
./configure –prefix=/usr/local/php-fpm \ 
–enable-cli –enable-fastcgi –enable-fpm \ 
–with-fpm-conf=/etc/php/php-fpm/php-fpm.conf \ 
–with-fpm-log=/var/log/php-fpm.log \ 
–with-fpm-pid=/var/run/php-fpm.pid \ 
–with-config-file-path=/etc/php/php-fpm \ 
 
PHP共同配置 
—–[These lines are common for both]—————- 
–disable-short-tags \ 
–disable-ipv6 \ 
–disable-all \ 

–enable-libxml \ 
–with-openssl=/usr/local/openssl-$PVERSION_OPENSSL \ 
–with-pcre-regex \ 
–with-zlib \ 
–with-bz2 \ 
–with-curl –with-curlwrappers \ 
–enable-dba=shared –with-db4 –enable-inifile –enable-flatfile \ 
–enable-dom –with-libxml-dir \ 
–enable-filter \ 
–enable-ftp \ 
–with-gd –with-jpeg-dir –with-png-dir –with-freetype-dir \ 
–with-gettext \ 
–enable-hash –with-mcrypt \ 
–with-iconv=/usr/local/lib –with-iconv-dir=/usr/local/lib \ 
–with-imap=/usr/local/imap-$PVERSION_CYRUSIMAP –with-imap-ssl \ 
–enable-json \ 
–enable-mbstring –enable-mbregex –enable-mbregex-backtrack \ 
–with-mysql=/usr/local/mysql-$PVERSION_MYSQL –with-mysqli=/usr/local/mysql-$PVERSION_MYSQL/bin/mysql_config \ 
–enable-pdo –with-pdo-mysql=/usr/local/mysql-$PVERSION_MYSQL –with-pdo-sqlite –enable-sqlite-utf8 \ 
–enable-reflection \ 
–enable-session –with-mm \ 
–enable-shmop \ 
–enable-simplexml \ 
–enable-soap \ 
–enable-sockets \ 
–enable-spl \ 
–with-regex \ 
–enable-sysvmsg –enable-sysvsem –enable-sysvshm \ 
–enable-tokenizer \ 
–enable-xml –enable-xmlreader –with-xmlrpc –enable-xmlwriter –with-xsl \ 
–enable-zip \ 

–with-pear \ 
–enable-zend-multibyte 
 
 
配置文档: 
 
 
 
Apache mod_php: httpd.conf http://blog.a2o.si/wp-content/uploads/2009/06/httpd.conf.txt 
Apache mod_php: php.ini http://blog.a2o.si/wp-content/uploads/2009/06/php.ini.txt 
Nginx php-fpm: nginx.conf http://blog.a2o.si/wp-content/uploads/2009/06/nginx.conf.txt 
Nginx php-fpm: php-fpm.conf http://blog.a2o.si/wp-content/uploads/2009/06/php-fpm.conf.txt 
Nginx php-fpm: php.ini与mod_php方式相同 
 
 
测试结果: 
HelloWorld.php  
 
 
 
 
在 这里你可以看到每个PHP请求施加的开销。有趣的的是一个事实是Apache在这个测试执行的更好而且好得多。这里的原因是,Apache的PHP“内 置”通过mod_php,并且模块处理。另一方面Nginx的代理PHP请求到另一个应用程序服务器(PHP-FPM)。 Nginx的性能在上面的图是大约为apache的一半,容易解释。这里的PHP只是简单输出字符串。 
 
 
[font='Lucida Grande', Verdana, Arial, sans-serif]HelloWorld.txt 
[font='Lucida Grande', Verdana, Arial, sans-serif] 
 
[font='Lucida Grande', Verdana, Arial, sans-serif] 
 
[font='Lucida Grande', Verdana, Arial, sans-serif] 
 
在本次测试的Apache开始落后。 NGINX的性能超过了apache性能的两倍。这项测试是展示静态文件服务的开销。 
 
 
[font='Lucida Grande', Verdana, Arial, sans-serif]100KB.txt 
[font='Lucida Grande', Verdana, Arial, sans-serif] 
 
[font='Lucida Grande', Verdana, Arial, sans-serif] 
 
在 这里的测试已经接近生产应用中的静态文件了(100KB),而且,我们能够证明,Nginx 禁用keepalive后与Apache 启用KeepAlive压力发现NGINX仍优于APACHE约两倍。此次测试的吞吐量约为1.2GB/s,但是所有测试均未真正出因特网(测试是在局域 网进行的)。 
 
 
[font='Lucida Grande', Verdana, Arial, sans-serif]1MB.txt  
 
 
这次测试没所有伺服均未开启keep alive,每个请求都要新建立连接,但相比于数据传输,这新建连接的开销就无所谓了。 
 
 
 
 
真正意义上的PHP程序: 
 
或许你会惊奇地看到,apache跑真实的、复杂点的PHP程序的时候,性能不及NGINX。 
但原文作者或许没有注意到,NGINX PHP这时执行的时候肯定有不少是弹了回错误了的(而且作者没开启日志,测试过后没查证) 
作者在原文只是这样说到: 
apache开启.htaccess(NGINX没有这个功能)过后,会导致连接数据库的性能有所下降。 
 
 
后面还有两项测试(分别是比较APACHE自己处理静态与自己处理动态的能力和NGINX的能力。)我就不在这里翻译了。 
 
 
 
 
总结: 
APACHE处理静态的能力不及NGINX,但NGINX处理PHP的稳定性不及apache mod_php。 
 
 
如果取长补短哩? 
NGINX做前端,APACHE做后端。NGINX proxy_pass apache,然后两个伺服doc_root配成一致,并让静态文件直接让NGINX输出,只转发PHP的请求给后端apache处理。 
 
 
有会员的疑问:两个伺服,根本是多此一举。 
回答:我的目标是高承载能力 稳定同时兼顾。而不是舍一取一。

© 著作权归作者所有

共有 人打赏支持
mac_zhao
粉丝 41
博文 249
码字总数 304671
作品 0
普陀
程序员
基于 LNMP 的扩展--lnmpx

本脚本是基于 LNMP1.3 的自定义安装包,因为原安装包只能选择 lnmp、lamp、lnmpa 三种模式,均为php+mysql+apache(nginx),无法拆分安装,而在现实中如果多台服务器分别安装 Apache+PHP、MyS...

motiandashao
2017/05/08
133
0
Web 服务器基准测试,nginx+php vs Apache+php

本次测试nginx+php与apache+php哪种组合的计算性能及稳定性更佳 操作系统:Centos6.4 x64 硬件环境: 实验思路:在本次测试中打算采用,同版本组合测试,如(nginx1.4.4+php5.5.7)vs (httpd...

qw87112
2016/03/01
0
0
Linux下,400-500并发,用Apache+PHP_MOD还是Nginx+PHP-fpm比较靠谱?

一直使用Ubuntu自带的LAMP做比较小的项目,最近遇到对并发要求比较高的,在考虑是否用Nginx+PHP-fpm,由于没有详细测试过,所以征求下过来人的意见。另外Nginx+PHP-fpm应该怎么设置性能方面的...

nhafeng
2014/03/16
2.1K
6
php-fpm中启用慢日志配置

apache+php的环境没有这个功能,必须是nginx+php-fpm环境中 mysql可以启动慢日志,php-fpm也可以记录慢日志。 启用慢日志的方法 vi /usr/local/php/etc/php-fpm.conf 打开php-fpm的配置文件 ...

于学康
02/22
0
0
centos6.2 64位LNMP(linux+nginx+mysql+php)实现

现在nginx运用越来越广泛。这是因为NGINX在某些方面优于apache。并且NGINX在web服务当中占有一定的比例,我们有必要了解和学习。下面步入正题,看LNMP架构怎么搭建。 首先,分析下LAMP架构的...

duyunlong
2013/03/01
0
0
PHP调试环境--PHPStudy

软件简介 UI界面不是很好看,但使用起来是非常非常的方便。 目标:让天下没有难配的php环境。 phpStudy Linux版和Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 该程序包集成最...

沙发迪
2016/10/03
1K
1
PHP一键集成环境phpStudy最新版安装包分享

今天春哥技术博客来给大家分享一下最新版的phpstudy安装包,phpstudy非常好用的一款一键集成php环境安装包,很多人都在用,我们春哥技术团队也一直在用,非常好用,推荐给大家。我们推荐用p...

cyrepair
2017/05/08
0
0
mysql 5.6性能vs mysql 5.5的讨论

这几天老外就mysql 5.6和5.5,MariaDB的benchmark讨论的很热烈,参考http://t.cn/zYoXNND一文,而法国朋友身先士卒,在http://t.cn/zYKgDmk中一连做了多个评测。下面大致归纳下 这些文中的观点...

jackyrong
2013/02/20
0
0
DragonFlyBSD 5.2 为缓解 CPU 漏洞带来的性能影响

DragonFlyBSD 已于上周发布,DragonFlyBSD 5.2 中,除了使用新的文件系统 HAMMER2 会带来性能方面的变化外,另一个显著变化是对 Spectre 和 Meltdown 漏洞的缓解。这篇文章将会描述一些针对 ...

局长
04/16
0
0
Visual Studio“15”启动速度提升

在Visual Studio“15”开发工作的技术预览阶段,微软称自己的主要目标之一是改善性能。他们已经对这些改进进行过一定程度的介绍,最近又通过更全面的信息进一步介绍了这些变化。本文将介绍这...

局长
2016/10/25
4.6K
21

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue-router懒加载

1. vue-router懒加载定义 当路由被访问的时候才加载对应组件 2. vue-router懒加载作用 当构建的项目比较大的时候,懒加载可以分割代码块,提高页面的初始加载效率。 ###3. vue-router懒加载实...

不负好时光
4分钟前
0
0
庆祝法国队夺冠:用Python放一场烟花秀

天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀。 这个有趣的小项目并不...

猫咪编程
6分钟前
0
0
SpringBoot | 第七章:过滤器、监听器、拦截器

前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关的,业务方是无需...

oKong
19分钟前
4
0
存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理...

DannyCoder
30分钟前
0
0
Firefox 61已经为Ubuntu 提供支持

最新和最好的Mozilla Firefox 61 “Quantum”网络浏览器已经为Ubuntu Linux操作系统的用户提供了支持,现在可以通过官方软件库进行更新。 Mozilla于2018年6月26日发布了Firefox 61版本,该版...

六库科技
56分钟前
0
0
Win10升级后执行系统封装(Sysprep)报错

开始封装 一年多以前开始给公司封装Win10系统,便于统一给公司电脑初始化携带各种软件的系统,致力于装完既可以开发的状态。那时候最新的版本是Win10 1703版本,自然就以他为母盘,然后结合V...

lyunweb
今天
39
0
php 性能优化

#什么情况下会遇到性能问题 PHP 语法使用的不恰当

to_be_better
今天
0
0
Jenkins 构建触发器操作详解

前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 一、定时构建语法 * * * * * (五颗星,中间用空格隔...

覃光林
今天
0
0
IDEA配置技巧

超详细设置Idea类注释模板和方法注释模板 idea去掉注解param下划线 JetBrains全系列破解

AK灬
今天
0
0
rsync通过服务同步/Linux系统日志/screen工具

rsync通过服务同步 分为服务端(机器A) 和客户端(机器B) 机器A操作编辑/etc/rsyncd.conf配置文件 [root@yolks1 ~]# vim /etc/rsyncd.conf 文件中添加以下配置 port=873 ...

Hi_Yolks
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部