1. 程式人生 > >centos 安裝ngnix+php+php-fpm

centos 安裝ngnix+php+php-fpm

1.安裝必要組建

 yum -y install gcc pcre-devel openssl openssl-devel

2.下載安裝ngnix

下載地址

http://nginx.org/en/download.html

wget http://nginx.org/download/nginx-1.2.9.tar.gz
tar zxvf nginx-1.2.9.tar.gz
cd nginx-1.2.9

新增一個不能登入的且沒有主目錄 名為nginx的使用者

useradd -s /sbin/nologin -M nginx

編譯安裝
./configure --prefix=/usr \
      --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_gzip_static_module
make && make install

新增一個systemV風格的啟動指令碼

vim /etc/init.d/nginxd
指令碼內容

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx" 
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf" 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/nginx.lock
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: " 
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
stop() {
    echo -n $"Stopping $prog: " 
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: " 
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
force_reload() {
    restart
}
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
    status $prog
}
rh_status_q() {
    rh_status >/dev/null 2>&1
}
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
        exit 2
esac

儲存退出 並給/etc/init.d/nginxd 賦予執行許可權
chmod +x /etc/init.d/nginxd
chkconfig --add nginxd        ##讓入開機啟動選項中
chkconfig nginxd on          #讓其開機自動啟動
service nginxd  start       #立即啟動nginx 服務

這是一個我的配置檔案

user  nginx;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    use epoll;
    worker_connections  50000;

}


http {
    server_tokens off; #返回錯誤頁面時是否在server中註明nginx版本

    access_log  off;
    error_log  /var/log/nginx/error.log warn;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';


    include       mime.types;
    default_type  application/octet-stream;


    sendfile       on;  #可以啟用Linux上的sendfile系統呼叫來發送檔案,它減少了核心態與使用者態之間的兩次記憶體複製,這樣就會從磁碟中讀取檔案後直接在核心態傳送到網絡卡裝置,提高了傳送檔案的效率。
    tcp_nopush     on;  #在開啟sendfile選項時,確定是否開啟FreeBSD系統上的TCP_NOPUSH或Linux系統上的TCP_CORK功能。開啟tcp_nopush後,將會在傳送響應時把整個響應包頭放到一個TCP包中傳送。
    tcp_nodelay    on;  #確定對keepalive連線是否使用TCP_NODELAY選項。

    #keepalive_timeout  0;
    keepalive_timeout  65;    #一個keepalive連線在閒置超過一定時間後(預設的是75秒),伺服器和瀏覽器都會去關閉這個連線。當然,keepalive_timeout配置項是用來約束Nginx伺服器的,Nginx也會按照規範把這個時間傳給瀏覽器
,但每個瀏覽器對待keepalive的策略有可能是不同的。

    gzip  on;

    include /etc/nginx/conf.d/*.conf;

}

3.下載安裝php

yum -y install libjpeg libjpeg-devel libpng libpng-devel libxml2 libxml2-devel curl curl-devel
wget http://cn2.php.net/distributions/php-5.5.12.tar.gz
tar zxvf php-5.5.12.tar.gz
cd php-5.5.12
./configure --prefix=/usr/local/php \
	--with-config-file-path=/usr/local/php/etc \
	--with-gd \
	--with-mysql \
	--with-mysqli \
	--with-pdo-mysql \
	--with-iconv \
	--with-zlib \
	--enable-xml \
	--enable-inline-optimization \
	--enable-fpm \
	--enable-mbstring \
	--with-openssl \
	--without-pear \
	--with-gettext \
	--enable-session  \
	--with-curl \
	--with-mhash

make && make install

在/etc/init.d/下新建php-fpm
#! /bin/sh

### BEGIN INIT INFO
# Provides:          php-fpm
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO

prefix=/usr/local/php
exec_prefix=${prefix}

php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=/var/run/php-fpm/php-fpm.pid

php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID" 

wait_for_pid () {
        try=0

        while test $try -lt 35 ; do

                case "$1" in
                        'created')
                        if [ -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;

                        'removed')
                        if [ ! -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                esac

                echo -n .
                try=`expr $try + 1`
                sleep 1

        done

}

case "$1" in
        start)
                echo -n "Starting php-fpm " 

                $php_fpm_BIN --daemonize $php_opts

                if [ "$?" != 0 ] ; then
                        echo " failed" 
                        exit 1
                fi

                wait_for_pid created $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed" 
                        exit 1
                else
                        echo " done" 
                fi
        ;;

        stop)
                echo -n "Gracefully shutting down php-fpm " 

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?" 
                        exit 1
                fi

                kill -QUIT `cat $php_fpm_PID`

                wait_for_pid removed $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed. Use force-quit" 
                        exit 1
                else
                        echo " done" 
                fi
        ;;

        status)
                if [ ! -r $php_fpm_PID ] ; then
                        echo "php-fpm is stopped" 
                        exit 0
                fi

                PID=`cat $php_fpm_PID`
                if ps -p $PID | grep -q $PID; then
                        echo "php-fpm (pid $PID) is running..." 
                else
                        echo "php-fpm dead but pid file exists" 
                fi
        ;;

        force-quit)
                echo -n "Terminating php-fpm " 

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?" 
                        exit 1
                fi

                kill -TERM `cat $php_fpm_PID`

                wait_for_pid removed $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed" 
                        exit 1
                else
                        echo " done" 
                fi
        ;;

        restart)
                $0 stop
                $0 start
        ;;

        reload)

                echo -n "Reload service php-fpm " 

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?" 
                        exit 1
                fi

                kill -USR2 `cat $php_fpm_PID`

                echo " done" 
        ;;

        *)
                echo "Usage: $0 {start|stop|force-quit|restart|reload|status}" 
                exit 1
        ;;

esac

chmod +x /etc/init.d/php-fpm #新增執行許可權
chkconfig --add php-fpm  #新增到chkconfig列表
chkconfig php-fpm on #設定開機啟動
mkdir /var/run/php-fpm  #新建目錄
/etc/init.d/php-fpm start #啟動php-fpm