php-fpm について
php-fpm について書く前に、WebアプリケーションとWebサーバの接続方法について知っておく必要があるので、そちらの説明を先に記載する。
WebアプリケーションとWebサーバの接続方法
WebアプリケーションとWebサーバの接続方法にはいくつかある。
- CGI
- FastCGI
- SCGI
- Webサーバの拡張モジュール
- WSGI
- TCPソケットのHTTPサーバ
- UnixドメインソケットのHTTPサーバ
CGI
アクセスされるたびに、Webアプリケーションのプロセスを起動。パラメータを環境変数や標準入出力でやり取りする。プロセス起動のコストがかかる。
FastCGI
CGI の処理の遅さを克服するために作られた接続方法。Webアプリケーションのプロセスがデーモンとして常駐し、パラメータは、ソケットを通じてバイナリプロトコルを使ってやり取りされる。多重化(リクエストを同時に処理する)にも対応している。
SCGI
FastCGI と同様、Webアプリケーションのプロセスがデーモンとして常駐し、パラメータは、ソケットを通じてバイナリプロトコルを使ってやり取りされる。FastCGI よりも単純で実装しやすい。
Webサーバの拡張モジュール
Webサーバ内で、Webアプリケーションが使うプログラミング言語の処理系を動作させる接続方法。WebアプリケーションがWebサーバの権限で動作する必要がある。Apache には各種言語のモジュールが用意されているが、nginx に対応するモジュールは少ない。
WSGI
Python のWebアプリケーションとやり取りするプログラミングインターフェース。
TCPソケットのHTTPサーバ
Webサーバのバックエンドとして、Webアプリケーションを含んだWebサーバを動作させ、前段のWebサーバ側でリバースプロキシを設定する方法。
UnixドメインソケットのHTTPサーバ
Unixドメインソケットとは、同一ホスト内でのプロセス間通信に使われる通信方法。TCP のように別のホストとの通信はできない。しかしポート番号を消費しないため、TCP より性能が出やすい。Webサーバのバックエンドとして、UnixドメインソケットでWebアプリケーションを含んだWebサーバを同一ホストで動作させ、前段のWebサーバ側でリバースプロキシを設定する方法。
php-fpm とは?
- PHP の開発元が配布しているデーモン
- FastCGI のインターフェースを使って、PHP プログラムを動作させる
- プールと呼ばれる塊を複数作ることができる(Webサーバでいうバーチャルホスト)。プールごとに同時接続数やプロセスの数を指定でき、プロセスやソケットは別のものを使う。使用する PHP アプリケーションごとに PHP-FPM のプールを作って、使用する資源を分ける
- yum のパッケージでインストールした場合、設定ファイルは
/etc/php-fpm.conf
と/etc/php-fpm.d/*.conf
が使用される
php-fpm.d/www.conf
設定例
listen /var/run/php-fpm/php-fpm.sock #リクエストを待ち受けるポートもしくはUnixドメインソケットを指定
user = nginx #プロセスの実行ユーザーを指定
group = nginx #プロセスの実行グループを指定
listen.owner = nginx #Unixドメインソケットを利用する場合のソケットのオーナー
listen.group = nginx #Unixドメインソケットを利用する場合のソケットグループ
listen.mode = 0660 #Unixドメインソケットを利用する場合のソケットパーミッション
コメント