Apache php-fpm fastcgi

Apache環境でPHP-FPM+FastCGIを動かす設定

優 Apache php-fpm fastcgi

Apache php-fpm fastcgiお客様の要件に合わせる為、色々なミドルウェアを組み合わせて環境を作ります。

今回はApache同梱のmod_phpを使わないでCGIでPHPを動作させる設定です。細かい部分はあるのですが、動くようにわかりやすく要点だけまとめます。

FastCGIの導入をします。

FastCGI

 

プロセス初回実行時に該当プロセスを一定時間サーバー内に保持することで、次回以降、実行時の「プロセスの起動/終了」を省略し、 高速化や、プロセスの起動/終了に伴うCPUへの負荷を軽減することで、速度面で優れるとされるモジュール版PHPと同等の処理能力を持つ動作方式です。

「FastCGI」を有効(ON)にすることで、一度「プロセスの起動」をすると、一定時間は「プロセスの終了」を することなく起動し続けることで、処理時間の大幅な短縮と、プロセスの起動/終了に伴うCPUへの負荷を軽減します。

 

@see https://www.xserver.ne.jp/manual/man_server_php_fastcgi.php

 

リポジトリを入れる

# yum install yum-plugin-priorities

【EPEL】

# yum install epel-release

【 RPMforge】

# yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

mod_fastcgiのインストール

 

mod_fastcgiモジュールを入れます。

# yum --enablerepo=rpmforge install mod_fastcgi 

PHPをFastCGIで動かす設定

# vi /var/www/cgi-bin/php.fastcgi

#!/bin/bash
PHPRC="/etc/php.ini"
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php-cgi

所有権設定

# chown apache:apache /var/www/cgi-bin/php.fastcgi

実行権限を与えます。

# chmod +x /var/www/cgi-bin/php.fastcgi

 

バーチャルホスト設定

# vi /etc/httpd/conf/httpd.conf

<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/vhosts/example.com/httpdocs/
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/vhosts/example.com/httpdocs/">
            Options Includes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi
            AllowOverride All
            Order allow,deny
            Allow from All
</Directory>
</VirtualHost>

 

設定を適用させる。

# service httpd restart

 

これでひとまずfastcgiでPHPが動きます。

ここからPHP-FPMと連携させる

 

PHP-FPMはプロセスを制御・管理してくれる。

FPM (FastCGI Process Manager)

PHP の FastCGI 実装のひとつで、 主に高負荷のサイトで有用な追加機能を用意しています。

以下のような機能があります。

  • 緩やかな (graceful) 停止/起動 機能を含む高度なプロセス管理

  • 異なる uid/gid/chroot/environment でのワーカーの開始、 異なるポートでのリスン、異なる php.ini の使用 (safe_mode の代替)

  • 標準出力および標準エラー出力へのログ出力

  • opcode キャッシュが壊れた場合の緊急再起動

  • 高速なアップロードのサポート

  • “slowlog” – 実行時間が非常に長いスクリプトの記録 (スクリプト名だけでなく、PHP バックトレースも記録します。バックトレースを取得するために、 ptrace やそれと同等の仕組みを使ってリモートプロセスの execute_data を読みます)

  • fastcgi_finish_request() – 何か時間のかかる処理 (動画の変換や統計情報の処理など) を継続しながら リクエストを終了させてすべてのデータを出力させるための特殊な関数

  • 動的/静的 な子プロセスの起動

  • 基本的な SAPI の動作状況 (Apache の mod_status と同等)

  • php.ini ベースの設定ファイル

@see http://php.net/manual/ja/install.fpm.php

yumでPHP-FPMをインストール

# yum install php-fpm php-cli

設定ファイル

# vi /etc/httpd/conf.d/fastcgi.conf

LoadModule fastcgi_module modules/mod_fastcgi.so

ScriptAlias /fcgi-bin/ /var/www/fcgi-bin/
FastCGIExternalServer /var/www/fcgi-bin/php-fpm -host 127.0.0.1:9000
AddHandler php-fastcgi .php
Action php-fastcgi /fcgi-bin/php-fpm

 

ディレクトリだけ作る(※空で大丈夫)

# mkdir /var/www/fcgi-bin

 

# vi /etc/php-fpm.d/www.conf

user = apache
group = apache

※ユーザとグループを環境に合わせ適宜変更する。

 

さっき設定したバーチャルホストの設定をPHP-FPM用に書き換える。

# vi /etc/httpd/conf/httpd.conf

<VirtualHost *:80>
NameVirtualHost *:80
ServerName example.com
DocumentRoot /var/www/vhosts/example.com/httpdocs/
DirectoryIndex index.html index.htm index.php
<Directory "/var/www/vhosts/example.com/httpdocs/">
            Options Includes FollowSymLinks +ExecCGI
            AllowOverride All
            Order allow,deny
            Allow from All
</Directory>
</VirtualHost>

Apache既存のmod_phpモジュール用設定ファイルを無効化する。

# mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf.org

Apacheに設定を反映させる

# service httpd restart

php-fpmを起動させよう

# service php-fpm start
# chkconfig php-fpm on

簡単にまとめるつもりが長くなっちゃいましたね。

お疲れ様です。

なんだか大変そうだなぁと思ったらご相談下さい。

Apache php-fpm fastcgi
最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG