1. 下载spawn-fcgi 二进制可执行程序,可以单独下载包(网上找)
ubuntu下直接用sudo apt-get install spawn-fcgi
2. 安装php
apt-get install php5-cgi php5-mysql php5-common php5-gd php5-curl php5-xcache php5-memcached php5-mcrypt php5-cli
也可以单独下载安装,注意包依赖
3. 安装nginx
apt-get install nginx
4. php启动脚本, man spawn-fcgi 查看参数意思
有两种:
1) /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 2222 -u ${user} -g ${group} -f /usr/bin/php5-cgi -C 128
指定ip地域、端口号
而对应nginx 运行php配置为:
fastcgi_pass 127.0.0.1:2222;
2) /usr/local/bin/spawn-fcgi -u ${user} -g ${group} -s /tmp/php.sock -f /usr/bin/php5-cgi -P ${pidpath} 1>/dev/null
指定sock文件、进程号。这个会很好地利于编写重启脚本。
而对应nginx 运行php配置为:
fastcgi_pass unix:/tmp/php.sock;
加3)当spawn-fcgi开启两个端口,利用nginx的upstream负载均衡php程序到不同的fcgi端口上面时,则这样设置:
nginx 负载均衡配置
upstream spawn {
# ip_hash;
server 127.0.0.1:9000 max_fails=0 fail_timeout=30s;
server 127.0.0.1:9001 max_fails=0 fail_timeout=30s;
}
而对应nginx 运行php配置为:
fastcgi_pass spaw;
附带运行php脚本:
1.
#!/bin/bash
PHP_SCRIPT="/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 2222 -u www-data -g www-data -f /usr/bin/php5-cgi -C 128"
FASTCGI_USER=www-data
RETVAL=0
case "$1" in
start)
su - $FASTCGI_USER -c "$PHP_SCRIPT"
RETVAL=$?
;;
stop)
killall -9 php5-cgi
RETVAL=$?
;;
restart)
killall -9 php5-cgi
su - $FASTCGI_USER -c "$PHP_SCRIPT"
RETVAL=$?
;;
*)
echo "Usage: php {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
2.
#! /bin/bash
pidpath="/tmp/spawn_php.pid"
user="daemon"
group="daemon"
phpcgi="/usr/local/php/bin/php-cgi"
PHP_FCGI_CHILDREN=50
PHP_FCGI_MAX_REQUESTS=50000
echo_ok ()
{
echo -ne "/033[33C ["
echo -ne "/033[32m"
echo -ne "/033[1C OK"
echo -ne "/033[39m"
echo -ne "/033[1C ]/n"
}
start_spawn()
{
env - PHP_FCGI_CHILDREN=${PHP_FCGI_CHILDREN} PHP_FCGI_MAX_REQUESTS=${PHP_FCGI_MAX_REQUESTS} /usr/local/bin/spawn-fcgi -u ${user} -g ${group} -s /tmp/php.sock -f ${phpcgi} -P ${pidpath} 1>/dev/null
echo -ne "php-cgi start successfull"
echo_ok
}
case "$1" in
start)
if [ ! -f $pidpath ]
then
start_spawn
else
pidcount=`ps -ef |grep ${phpcgi}|wc -l`
if [ "$pidcount" -gt "1" ]
then
echo -ne "php already running "
echo_ok
else
rm -f $pidpath
rm -f /tmp/php.sock
start_spawn
fi
fi
;;
stop)
pid=`cat ${pidpath} 2>/dev/null`
kill ${pid} 2>/dev/null
rm -f ${pidpath} 2>/dev/null
rm -f /tmp/php.sock 2>/dev/null
echo -ne "php-cgi stop successfull"
echo_ok
;;
restart)
pid=`cat ${pidpath} 2>/dev/null`
kill ${pid} 2>/dev/null
rm -f ${pidpath} 2>/dev/null
rm -f /tmp/php.sock 2>/dev/null
echo -ne "php-cgi stop successfull"
echo_ok
if [ ! -f $pidpath ]
then
start_spawn
else
pidcount=`ps -ef |grep ${phpcgi}|wc -l`
if [ "$pidcount" -gt "1" ]
then
echo -ne "php already running "
echo_ok
else
rm -f $pidpath
rm -f /tmp/php.sock
start_spawn
fi
fi
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit