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をコピーしました