virtualbox(centos)でphp-buildでコンパイルしたphp-fpmをnginxで使う為の設定メモ(virturalhostの設定まで)

  • 18
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

環境 centos6.3(ゲストOS)macosx10.8(ホストOS)

nginxを以前入れたのだが肝心のphpの設定をまだ指定なかったので設定のメモ。
ついでに普段複数のサイトを開発する場合に必要なvirtualhostの設定まで

注意事項

参考にしたサイト

ゲストOS(centos)側のIPの確認

今回はvirtualhostを設定するのでゲストOS側のIPを調べる

$ifconfig

#下記の項目(inet)がどこかにあるのでメモしておく(デフォルトだと192.168.xx.xxx)なはず
inet addr:192.168.56.101

ホストOS側(MAC)の設定

virtualhostの追加

hostsにnginx側のバーチャルホストの設定を追加しましょう

/etc/hosts

sudo vim /etc/hosts
#追加(ifconfigのinetの値)
192.168.56.101  lo.test.org
192.168.56.101  lo.sample.org

※windows8のhostsファイルの設定などはhostsファイルを編集を参考にしてください。

PATHが通っているか確認する

virtualbox(centos)でnginxインストールメモからの設定だとphp-fpmにPATHが通っていないので確認しましょう

/root/.bashrc
#修正前
export PATH="/root/.phpenv/bin:$PATH"

#修正後
export PATH="/root/.phpenv/bin:/root/.phpenv/versions/5.4.11/sbin:$PATH"

nginxの設定

nginxにPHPの設定を追加しましょう

/etc/nginx/conf.d/default.conf
vim /etc/nginx/conf.d/default.conf



server {
    listen       80;
    server_name  lo.test.org;
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/web/lo.test.org/www$fastcgi_script_name;
        include        fastcgi_params;
    }
}

server {
    listen       80;
    server_name  lo.sample.org;
    root   /home/web/lo.sample.org/www;
    index  index.php index.html index.htm;
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/web/lo.sample.org/www$fastcgi_script_name;
        include        fastcgi_params;
    }
}

serverディレクティブにそれぞれ server_nameを追加してserverディレクティブのlocationの項目にroot(apacheで言うドキュメントルート)を追加する。
fastcgi_paramにはドキュメントルート+$fastcgi_script_nameを追加する
今回の場合はlo.test.orgとlo.sample.orgというバーチャルホストを切っている

nginxの起動

apacheと一緒

/etc/init.d/nginx restart


httpd を停止中:                                            [  OK  ]
nginx を起動中:                                            [  OK  ]

php-fpmの確認

バージョン確認

php-fpm -v
PHP 5.4.12 (fpm-fcgi) (built: Feb 20 2013 14:06:12)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

動いている

php-fpm.confの確認

以前の記事virtualbox(centos)でphpenv+php-buildインストールメモ(5.3,5.4変更確認まで)でやった場合、/root/.phpenv/versions/5.4.11/etc/php-fpm.conf.defaultというのがあるのでそれをコピーしてphp-fpmの設定ファイルを作成する

cp /root/.phpenv/versions/5.4.11/etc/php-fpm.conf.default /root/.phpenv/versions/5.4.11/etc/php-fpm.conf

設定を編集する

デフォルトのままで動かいたい場合はpidの項目だけ編集すればとりあえず動きます。
(というか自分はどれが何のことだがよくわからなかった。。。。)

/root/.phpenv/versions/5.4.11/etc/php-fpm.conf
vim /root/.phpenv/versions/5.4.11/etc/php-fpm.conf

#修正前
;pid = run/php-fpm.pid

#修正後
pid = run/php-fpm.pid
#コメントアウト外す

PHPのtimezoneの設定について

自分の環境だとphp-fpmで起動した場合にphp.iniのtimezoneを設定したのにかかわらずエラーになっていました。
そこでphp-fpmの設定ファイル郡/root/.phpenv/versions/5.4.11/etc/conf.d/にdate.iniというのを作って対応しました。

/root/.phpenv/versions/5.4.11/etc/conf.d/date.ini
vim /root/.phpenv/versions/5.4.11/etc/conf.d/date.ini


[Date]
date.timezone = Asia/Tokyo

これでtimezoneのエラーが消えました。
phpinfo()とかでtimezoneのエラーになっている場合は試してみてください。

php-fpmの起動

ちなみにこういうエラーが出た場合は一旦php-fpmのプロセスを切りましょう。

php-fpm
[25-Feb-2013 11:12:41] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[25-Feb-2013 11:12:41] ERROR: FPM initialization failed

php-fpmのプロセスが既に起動していて起動できないよ!!ってエラーです。(他に9000番のポートを使った場合は別ですが)

 ps aux | grep php
root      4485  0.0  0.6 291632  6584 ?        Ss   13:48   0:01 php-fpm: master process (/root/.phpenv/versions/5.4.11/etc/php-fpm.conf)
nobody    4486  0.0  0.9 291796  9288 ?        S    13:48   0:00 php-fpm: pool www
nobody    4487  0.0  0.9 291792  9312 ?        S    13:48   0:00 php-fpm: pool www
root      4815  0.0  0.0 107460   916 pts/1    S+   18:37   0:00 grep php



#masterプロセスを一旦落とす
kill 4485

起動

php-fpm
#何も出てこないがエラーが無ければ起動している


 ps aux | grep php
root      4817  0.0  0.6 291636  6584 ?        Ss   18:39   0:00 php-fpm: master process (/root/.phpenv/versions/5.4.11/etc/php-fpm.conf)
nobody    4818  0.0  0.9 291792  9280 ?        S    18:39   0:00 php-fpm: pool www                         
nobody    4819  0.0  0.7 291636  7184 ?        S    18:39   0:00 php-fpm: pool www                         
root      4823  0.0  0.0 107460   920 pts/1    S+   18:40   0:00 grep php

起動スクリプトの作成

面倒なんで起動した状態でphp-fpmが起動している状態にしちゃいましょう。
下記のサイトを参照して作成しました。
CentOS NginxとPHPの連携

/etc/init.d/php-fpm
#! /bin/sh
#
# php-fpm - this script starts and stops the php-fpm daemon 
#
# chkconfig: - 85 15
# description: PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation
#              with some additional features useful for sites of any size, especially busier sites.
# processname: php-fpm                                                                                                                                            

PROG="/root/.phpenv/versions/5.4.11/sbin/php-fpm"
CONF="/root/.phpenv/versions/5.4.11/etc/php-fpm.conf"
LOCKFILE="/var/log/php-fpm/lock"

[ -f $CONF ] || exit 1

# Source function library.                                                                                                                                         
. /etc/init.d/functions

RETVAL=0

start() {
    echo -n $"Starting $PROG:"
    daemon $PROG -c $CONF
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && touch $LOCKFILE
    return $RETVAL
}

stop() {
    echo -n $"Stopping $PROG:"
    killproc $PROG
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f $LOCKFILE
    return $RETVAL
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    condrestart)
        if [ -f $LOCKFILE ]; then
            stop
            start
        fi
        ;;
    reload)
        action $"Reloading $PROG:" killall -HUP $PROG
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
        exit 1
esac

exit $RETVAL

PROG="/root/.phpenv/versions/5.4.11/sbin/php-fpm"
CONF="/root/.phpenv/versions/5.4.11/etc/php-fpm.conf"
LOCKFILE="/var/log/php-fpm/lock"
上記の項目はそれぞれ各自の環境で変更してください。
自分はphpenvでいれたので上記になります。
phpenvについてはvirtualbox(centos)でphpenv+php-buildインストールメモ(5.3,5.4変更確認まで)を参照してください。

起動スクリプトのパーミッションを変更

755で

chmod 755 /etc/init.d/php-fpm

起動スクリプトの動作確認

起動する場合

/etc/init.d/php-fpm start
/root/.phpenv/versions/5.4.11/sbin/php-fpm を起動中:       [  OK  ]

停止する場合

/etc/init.d/php-fpm stop
/root/.phpenv/versions/5.4.11/sbin/php-fpm を停止中:       [  OK  ]

自動起動を追加

これもいつもどおり

chkconfig --add php-fpm
chkconfig php-fpm on

これでいちいちプロセス探してkillとかしてなくて良くなりました。

動作確認用のphpファイルを設置

いつもどおりで

ドキュメントルート/phpinfo.php
<?php
phpinfo();

上記の設定の場合は
/home/web/lo.sample.org/www/phpinfo.php
/home/web/lo.test.org/www/phpinfo.php
の2つに設定してください。

動作確認

上記の設定の場合は
http://lo.sample.org/phpinfo.php
http://lo.test.org/phpinfo.php
でphpinfoの中身が見えればOK!!

ちょっとはじめどこにphp-fpmがあるかわからず混乱しましたが落ち着いて考えれば以外とすんなり出来ました。
これでphp-fpm+phpenvのタッグが組めると思います。