もしLinux上にPHPが使えるWebサーバーを新規に設定するなら、PHP-FPMを設定してください。PHP-FPMを使うことで管理の手間が多少増えますが、PHPの動作が早くなるなど多くのメリットが得られます。
しかし、設定がなんだか難しそう、と思われる方がいるかもしれません。今回はそのような方にPHP-FPMの機能やメリット、さらに設定手順について解説します。
目次
今Webサーバーを作るならFPMは必須
PHPでWebサービスを構築するなら最低限LAMPスタックを構築するだけの知識が必要です。しかし、PHPで開発したシステムを運営する場合、昔から使われているLAMPスタックでは不十分なのをご存じでしょうか。今の時代に必要な新しい技術を利用しましょう。
なお、LAMPスタックはエンジニアにとって必須のインフラ知識の1つです。今回紹介するFPMもそのような新しい技術の1つです。まずは、FPMの基本について解説します。
エンジニアで稼ぎたい人必見!!独学から1年で年収1,200万を稼ぐエンジニアが語る、エンジニアに必要な20のスキル!!FPMの意味
今回紹介するFPMはFastCGI Process Managerの略で、FastCGIの一種です。ちなみにCGIとは、Common Gateway Interfaceの略で、Webブラウザからの要求に応じて、WebサーバーでHTMLを合成する仕組みのことを指します。
なお、WebサーバーにApache httpdを使用している場合、特定のディレクトリに”Options +ExecCGI”を設定することでCGIの実行を許可でき、昔はperlのスクリプトを実行していました。
しかし、このような昔のCGIの仕組みは、要求があったらプロセスを起動してHTMLを合成するため処理の遅さが欠点です。その点FastCGIは、あらかじめプロセスを起動しておき、要求があったらそのプロセスを利用して高速にHTMLを合成する仕組みです。
FPMの効果
先ほどFPMはFastCGIの一種で従来のCGIよりも高速で処理できる点がメリットと紹介しましたが、FPMの効果はそれだけではありません。
アクセスの多いWebサーバーで従来のCGIが使われていると、CPUが要求を処理しきれなくなり、プロセスの処理待ちが発生します。しかも、CGIを実行するごとにプロセスが生成され、メモリーを確保していくので、処理待ちのプロセスがあまりに多いとメモリーを使い切ってしまう、といった不具合も発生しかねません。
その点FPMは、予め起動してあるプロセスが要求を順番に処理していくのでメモリーの使用効率が良く、その分高速に処理できます。そのため、最近では新しくWebサーバーを構築するならFPMを利用するのが一般的です。
PHPでFPMを利用するには
ではPHPでFPMを利用するにはどうすればいいでしょうか。昔から使われているLAMPスタックでは、WebサーバーのApache httpdにPHPのプロセスを生成するモジュールを組み込んで利用していました。
しかし、FPMではそのような方法は使いません。FPMのサービスを起動しておき、外部プロセスであるFPMのサービスに接続してPHPを実行します。具体的にはWebサーバーにPHP-FPMパッケージをインストールし、サービスとして実行しておきます。
そしてWebサーバーがPHPへのアクセス要求を受け取ったら、それを既に起動してあるPHP-FPMプロセスを利用してPHPのプログラムを実行し、合成したHTMLをWebサーバーがWebブラウザに送信します。
PHP-FPMの導入手順
先ほど紹介したようにFPMを利用してPHPを実行する環境を作るためには、PHP-FPMの導入が必要です。次から、レンタルサーバーなどでよく利用されることの多いCentOSにPHP-FPMを設定する手順を紹介します。
PHP-FPM導入の前提
PHP-FPMを利用するには、LAMPスタック、すなわちLinuxにApache httpd、MySQL、PHPが使える環境が必要です。そのためCentOSをWebサーバーでPHP-FPMを使うのなら、事前にhttpd、mysqlまたはmariadb、そしてphpの各種パッケージをインストールしてください。
PHP-FPM導入の前提でCentOSにインストールするパッケージ例
1 2 3 4 5 6 7 8 9 10 |
httpd.x86_64 mariadb.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-json.x86_64 php-mbstring.x86_64 php-mysqlnd.x86_64 php-pdo.x86_64 php-xml.x86_64 |
PHP-FPMをインストールする
CentOSでWebサーバーにLAMPスタックに必要なパッケージをインストールしたら、続いてPHP-FPMをインストールします。なお、CentOSではパッケージのインストールにyumまたはdnfコマンドを使用するので、次のようなコマンドでインストールしてください。
PHP-FPMインストールコマンド
yum install php-fpm
なお、CentOSのデフォルトでインストールできるPHPのバージョンは最新版ではありません。そのためインターネットを検索すると、PHPの新しいバージョンを利用する方法が見つかります。
もし、デフォルトでインストールできるPHPではなく、より新しいバージョンのPHPを利用している場合は、そのバージョンのPHP-FPMをインストールしてください。
PHP-FPMサービスを起動する
PHP-FPMは、OS起動時にプロセスを起動するデーモンとして動作します。そのためサービスに追加して、OS起動時に実行できるように設定しなければなりません。PHP-FPMをインストールできたら、まずはsystemctlコマンドで設定できるかをチェックしてください。
PHP-FPMサービスをチェックするコマンド
1 2 |
# systemctl list-unit-files | grep php-fpm php-fpm.service disabled |
インストールした直後は「disabled」でOS起動時にデーモンとして実行しない設定なので、「enable」にし、さらにデーモンを実行すると、PHP-FPMが利用できます。
PHP-FPMサービスを有効にするコマンド
1 2 |
# systemctl enable php-fpm # systemctl start php-fpm |
PHP-FPMの設定手順
残念ながらPHP-FPMをインストールし、サービスとして有効にしてもすぐに利用できるわけではありません。Webサーバー機能を提供するhttpdにPHP-FPMを利用するための設定が必要です。次から、PHP-FPMを利用するための設定を解説します。
httpdの設定ファイルを修正する
CentOSでApache httpdを利用してWebサーバーを構築する場合、インストールしたパッケージに応じた設定ファイルが作られます。そして、今回紹介するPHP-FPMパッケージ用の設定ファイルがphp.confです。
そしてこのファイルに、WebサーバーがPHPファイルへの要求を受け取った際、PHP-FPMにアクセスするための設定を記述します。
php.confに記述したPHP-FPM利用設定
1 2 3 4 5 6 7 8 9 10 |
# Redirect to local php-fpm if mod_php (5 or 7) is not available <IfModule !mod_php5.c> <IfModule !mod_php7.c> # Enable http authorization headers SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 <FilesMatch \.(php|phar)$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> </IfModule> </IfModule> |
上記の「SetHandler」の記述がPHP-FPMの設定に該当します。なお、Apache httpdの設定ファイルを編集したら必ずサービスを再起動してください。
PHP-FPMの動作チェック
PHP-FPMの設定が終わったら、正常に動作することをチェックしなければなりません。よく使われる方法が、phpinfo()関数で、PHPの動作環境をチェックする方法です。
PHP-FPMを設定した次のようなphpファイルを用意して、Webブラウザからアクセスして動作チェックしてください。
1 2 3 |
<?php phpinfo(); ?> |
このリストの中にPHP-FPMの項目があれば、正常に動作していることを確認できます。
まとめ
もし新しくPHPを利用するWebサーバーを構築するなら、FPMを設定するのが一般的です。なお、これまで紹介したようにFPMを利用することでプロセスの利用効率がよく、アクセスが増えても安定したレスポンスが得られるなど、メリットがたくさんあります。
今回紹介した内容を参考に、ぜひ、PHP-FPMを利用してください。