連載
» 2016年02月26日 05時00分 UPDATE

とにかく速いWordPress(4):CentOS 7の標準環境だけですぐできる、WordPress「5.4倍高速化」テクニック 後編 (2/3)

[中村けん牛,プライム・ストラテジー]

Apacheを「event MPM+php-fpm」構成に変更する

 最後に、今回のチューニングの総仕上げとなる作業をしましょう。Apacheの構成を「prefork MPM+mod_php」構成から、「event MPM+php-fpm」構成に変更することで、さらなる最適化が図れます。

 従来、Apacheの主流となるマルチプロセッシングモジュールは「prefork MPM」でしたが、Apache 2.4から「event MPM」が選択できるようになりました。event MPMは、fast cgi方式のphp-fpmと組み合わせることによって、従来のprefork MPM+mod_phpの組み合わせに比べて、メモリ使用量を大きく減らし、同時接続数増加時のパフォーマンス劣化も抑えられるメリットを得られるようになります。

 イメージとしては、軽量高速で近年シェアを伸ばしているWebサーバの「Nginx(エンジンエックス)」に近いものです。Apacheがもともと持っている豊富なモジュールや.htaccessによる柔軟な設定制御などのメリットはそのままに、パフォーマンスが大幅に向上しますので、この構成は「新しいApache」といっても過言ではないと思います。


 では、具体的に設定していきましょう。まず、php-fpmを導入し、実行します。

[root@ip plugins]# yum install php-fpm -y
[root@ip plugins]# systemctl enable php-fpm
[root@ip plugins]# systemctl start php-fpm

 次に、Apacheの設定ファイルを変更します。変更するファイルは「/etc/httpd/conf.modules.d/00-mpm.conf」「/etc/httpd/conf.d/php.conf」「/etc/httpd/conf/httpd.conf」の3つです。

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so
リスト4:/etc/httpd/conf.modules.d/00-mpm.conf(5行目、15行目が変更箇所)
<IfModule prefork.c>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
#
# Allow php to handle Multiviews
#
AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following lines to allow PHP to pretty-print .phps
# files as PHP source code:
#
#<FilesMatch \.phps$>
#    SetHandler application/x-httpd-php-source
#</FilesMatch>
#
# Apache specific PHP configuration options
# those can be override in each configured vhost
#
php_value session.save_handler "files"
php_value session.save_path    "/var/lib/php/session"
</IfModule>
リスト5:/etc/httpd/conf.d/php.conf(1行目、30行目が変更箇所)
(略)
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
(略)
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
# gzip setting
AddOutputFilterByType DEFLATE text/html text/plain text/css
AddOutputFilterByType DEFLATE text/javascript application/x-javascript application/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# expire setting
ExpiresActive On
ExpiresDefault "access plus 600 seconds"
ExpiresByType text/html "access plus 10 seconds"
# event MPM setting
<IfModule mpm_event_module>
        StartServers             2
        MinSpareThreads         25
        MaxSpareThreads         50
        ThreadsPerChild         50
        MaxRequestWorkers       50
        MaxConnectionsPerChild   0
       <FilesMatch \.php$>
                SetHandler "proxy:fcgi://127.0.0.1:9000"
       </FilesMatch>
</IfModule>
リスト6:/etc/httpd/conf/httpd.confより一部抜粋(7行目、24〜35行目が変更箇所)

 Apacheを再起動して設定を反映させます。

[root@ip plugins]# systemctl restart httpd

 筆者の環境では、ページのロード時間が33ms、Requests per secondは60.79となり、さらに約5%のパフォーマンス向上を果たせました。

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。