PHP
nginx

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

More than 5 years have passed since last update.

環境 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のタッグが組めると思います。