フォーラムの一部のメンバーが独自の方法で PHP を実行する際の NGINX と APACHE のパフォーマンスについて疑問を抱いているという事実を考慮して、海外の記事を転載および翻訳し、後で私自身の意見を表明しました。みんなに。
原文: http://blog.a2o.si/2009/06/24/apache-mod_php-compared-to-nginx-php-fpm/
すべてのソフトウェアはソース コードからコンパイルされます (詳細は以下を参照)。ストレス テスト ツールは APACHE の ApacheBench (ab) を使用します。次の結果は、すべてのサーバー システム (nginx、apache) でログ機能がオフになっています (テスト中はキープアライブが有効です)。各テストは 1 回有効にされ、1 回無効にされ、平均値が取得されます。テストされたファイルは次のとおりです:
HelloWorld.php ? PHP ファイルのテスト処理プロセスのオーバーヘッドを表すために使用される、短く出力される PHP スクリプト
HelloWorld.txt ? 「Hello, World!」 (同じ 13 バイト) を出力する静的ファイル
100KB.txt ? 静的な 1MB サイズのファイルファイル
Index.php ? データベース クエリ、ファイル キャッシュの読み取り、テンプレート [コンパイル] 処理など、複数の複雑な処理プロセスが含まれる PHP ファイル。
ハードウェア環境
ハードウェア: HP DL380 G5
ハードウェア CPU: 2x Intel Xeon E5420 (各 4 コア、合計 8 コア)
ハードウェア メモリ: 8GB の ECC RAM
ハードウェア ディスク: 2x 147GB SAS を備えた Smart Array P400i RAID-1ドライブ
オペレーティングシステム: Slackware 12.2 (ほぼすべてのソフトウェアがソースからコンパイルされたもの)
ファイルシステム: ext3
Apache バージョン: 2.2.11、php は mod_php によって実行されます
Nginx バージョン: 0.7.59、php は php-fpm によって実行されます (ソケット経由) ) )
PHP バージョン: 5.2.9
Eaccelerator バージョン: 0.9.5.3 (Apache と 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):
??[これらの行は Apache を使用した PHP (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) で実行
??[これらの行は Nginx を使用した PHP (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 共通設定
?[これらの行 ?両方に共通です]?????-
?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
?有効- 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 の PHP は mod_php によって「内部配置」され、モジュールが処理されます。 一方、Nginx のプロシージャ PHP は別のアプリケーション プログラム サーバー (PHP-FPM) を要求します。 上の図のパフォーマンスは、Apache のほぼ半分です。ここの PHP は単一出力文字列のみです。 ]
[font='Lucida Grande', Verdana, Arial, sans-serif]
[font='Lucida Grande', Verdana, Arial, sans-serif]
今回の検査では Apache が開始落とされました。このテストは静的ファイル サービスの公開です。 、Verdana、Arial、sans-serif]
[font='Lucida Grande'、Verdana、Arial、sans-serif]
在这里的测试已经接近生产应用中的静态文件了(100KB),而して我们能够明らかに、Nginx はキープアライブを無効にし、Apache を使用したキープアライブの圧力よりも NGINX が APACHE よりも約 2 倍優れています。 )。
[font='Lucida Grande', Verdana, Arial, sans-serif]1MB.txt
この次の調査はすべてのサービングサービスが維持されておらず、各要求が新しく確立されています。ただしデータ転送と比較して、これは新しく作成された接続の制限はありません。 、重要な PHP プログラムの時期、パフォーマンスには NGINX は関係しません。へ:
apache 启.htaccess(NGINX にはこの機能はありません)その後、接続されているデータベースのパフォーマンスが低下する可能性があります。自分で処理する能力とNGINX
要約:
APACHE の静的処理能力は NGINX とは関係ありませんが、NGINX 処理 PHP の安定性は apache mod_php とは関係ありません。
如果取长补短哩?
NGINX がフロントエンド、APACHE がバックエンドです。 NGINX proxy_pass apache を使用し、一貫性を保つために 2 つのサーバー doc_root を照合し、NGINX に静的ファイルを直接出力させ、処理のために PHP リクエストのみをバックエンド Apache に転送します。
メンバーから質問があります。2 つのサーボは単純に不要です。
回答: 私の目標は、高い耐荷重性と安定性を同時に実現することです。一つを選ぶのではなく。