» TechAcademyの無料体験

php-fpmについて

php-fpmについてPHP

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ドメインソケットを利用する場合のソケットパーミッション

参考

コメント

タイトルとURLをコピーしました