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 -v
Server version: Apache/2.4.18 (Ubuntu)

PHP

# php -v
PHP 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-fpm
● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since 土 2017-12-02 02:01:12 JST; 32s ago
  Process: 29148 ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
 Main PID: 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
           ├─29166 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)                      
           ├─29172 php-fpm: pool www                                                            
           └─29173 php-fpm: pool www

正常に動作し始めた模様。

その後、php7.0-fpmを自動起動するように設定する。

# systemctl enable php7.0-fpm

apacheの設定変更

PHPファイルはPHP-FPMに転送するように設定。VirtualHostの中にこの設定を突っ込む。

<FilesMatch "\.php$">
    SetHandler "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を使って検証してみた。

GTmetrix | Website Speed and Performance Optimization
GTmetrix is a free tool that analyzes your page's speed performance. Using PageSpeed and YSlow, GTmetrix generates scores for your pages and offers actionable recommendations on how to fix them.

以前の環境

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

PHP-FPM導入後

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

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

Google PageSpeed Insights

導入前

モバイルはPoor:63/100、パソコンはNeeds Work 84/100。

導入後

モバイルはPoor:63/100、パソコンはNeeds Work: 84/100。変わってないやんけ。

総評

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