찾다
백엔드 개발PHP 튜토리얼APACHE+PHP vs NGINX+PHP 性能评测(译文)

鉴于论坛里有会员对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处理。 
 
 
有会员的疑问:两个伺服,根本是多此一举。 
回答:我的目标是高承载能力 稳定同时兼顾。而不是舍一取一。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
로드 밸런싱이 세션 관리에 어떤 영향을 미치는지 설명하고 해결 방법을 설명하십시오.로드 밸런싱이 세션 관리에 어떤 영향을 미치는지 설명하고 해결 방법을 설명하십시오.Apr 29, 2025 am 12:42 AM

로드 밸런싱은 세션 관리에 영향을 미치지 만 세션 복제, 세션 끈적임 및 중앙 집중식 세션 스토리지로 해결할 수 있습니다. 1. 세션 복제 복사 서버 간의 세션 데이터. 2. 세션 끈은 사용자 요청을 동일한 서버로 안내합니다. 3. 중앙 집중식 세션 스토리지는 Redis와 같은 독립 서버를 사용하여 세션 데이터를 저장하여 데이터 공유를 보장합니다.

세션 잠금의 개념을 설명하십시오.세션 잠금의 개념을 설명하십시오.Apr 29, 2025 am 12:39 AM

SessionLockingIsateChniqueSureDureauser의 SessionLockingSsessionRemainSexclusivetoOneuseratatime.itiscrucialforpreptingdatacorruptionandsecurityBreachesInmulti-userApplications.sessionLockingSogingSompletEdusingserVerver-sidelockingMegynisms, unrasprantlockinj

PHP 세션에 대한 대안이 있습니까?PHP 세션에 대한 대안이 있습니까?Apr 29, 2025 am 12:36 AM

PHP 세션의 대안에는 쿠키, 토큰 기반 인증, 데이터베이스 기반 세션 및 Redis/Memcached가 포함됩니다. 1. Cookies는 클라이언트에 데이터를 저장하여 세션을 관리합니다. 이는 단순하지만 보안이 적습니다. 2. Token 기반 인증은 토큰을 사용하여 사용자를 확인합니다. 이는 매우 안전하지만 추가 논리가 필요합니다. 3. Database 기반 세션은 데이터베이스에 데이터를 저장하여 확장 성이 좋지만 성능에 영향을 줄 수 있습니다. 4. Redis/Memcached는 분산 캐시를 사용하여 성능 및 확장 성을 향상하지만 추가 일치가 필요합니다.

PHP의 맥락에서 '세션 납치'라는 용어를 정의하십시오.PHP의 맥락에서 '세션 납치'라는 용어를 정의하십시오.Apr 29, 2025 am 12:33 AM

SessionHijacking은 사용자의 SessionID를 얻음으로써 사용자를 가장하는 공격자를 말합니다. 예방 방법은 다음과 같습니다. 1) HTTPS를 사용한 의사 소통 암호화; 2) SessionID의 출처를 확인; 3) 보안 세션 생성 알고리즘 사용; 4) 정기적으로 SessionID를 업데이트합니다.

PHP의 전체 형태는 무엇입니까?PHP의 전체 형태는 무엇입니까?Apr 28, 2025 pm 04:58 PM

이 기사는 PHP에 대해 설명하고, 전체 형식, 웹 개발의 주요 용도, Python 및 Java와의 비교 및 ​​초보자를위한 학습 용이성을 자세히 설명합니다.

PHP는 양식 데이터를 어떻게 처리합니까?PHP는 양식 데이터를 어떻게 처리합니까?Apr 28, 2025 pm 04:57 PM

PHP는 유효성 검사, 소독 및 보안 데이터베이스 상호 작용을 통해 보안을 보장하면서 $ \ _ post 및 $ \ _를 사용하여 데이터 양식 데이터를 처리합니다.

PHP와 ASP.NET의 차이점은 무엇입니까?PHP와 ASP.NET의 차이점은 무엇입니까?Apr 28, 2025 pm 04:56 PM

이 기사는 PHP와 ASP.NET을 비교하여 대규모 웹 응용 프로그램, 성능 차이 및 보안 기능에 대한 적합성에 중점을 둡니다. 둘 다 대규모 프로젝트에서는 실용적이지만 PHP는 오픈 소스 및 플랫폼 독립적이며 ASP.NET,

PHP는 사례에 민감한 언어입니까?PHP는 사례에 민감한 언어입니까?Apr 28, 2025 pm 04:55 PM

PHP의 사례 감도는 다양합니다. 함수는 무감각하고 변수와 클래스는 민감합니다. 모범 사례에는 일관된 이름 지정 및 비교를위한 사례 감수 기능 사용이 포함됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구