高負載web架構(二)

b.node6上安裝nginx做爲靜態內容處理php

編譯安裝nginxhtml

# tar xfnginx-1.6.1.tar.gz -C /usr/local/node

首先添加用戶nginx,實現以之運行nginx服務進程:mysql

# groupadd -rnginxnginx

# useradd -r -gnginx nginxc++

安裝一些依賴的包sql

# yum install -ygcc gcc-c++ pcre-devel openssl-devel數據庫

接着開始編譯和安裝:apache

# ./configure--prefix=/usr/local/nginx --error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid--lock-path=/var/lock/nginx.lock --user=nginx --group=nginx--with-http_ssl_module --with-http_flv_module --with-http_stub_status_module--with-http_gzip_static_module--http-client-body-temp-path=/usr/local/nginx/client--http-proxy-temp-path=/usr/local/nginx/proxy --with-pcrevim

# make &&make install

提供啓動腳本,/etc/rc.d/init.d/nginx

#!/bin/sh

#

# nginx - thisscript 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 functionlibrary.

./etc/rc.d/init.d/functions

 

# Sourcenetworking configuration.

./etc/sysconfig/network

 

# Check thatnetworking is up.

["$NETWORKING" = "no" ] && exit 0

 

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename$nginx)

 

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

 

[ -f/etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

 

lockfile=/var/lock/subsys/nginx

 

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

然後爲此腳本賦予執行權限:

# chmod +x/etc/rc.d/init.d/nginx

添加至服務管理列表,並讓其開機自動啓動:

# chkconfig --addnginx

# chkconfig nginxon

然後就能夠啓動服務並測試了:

# service nginxstart

# ss -tnlp | grep80

上傳文件測試訪問

訪問中文文件名亂碼問題

解決辦法:http://www.apelearn.com/bbs/thread-7630-1-1.html

centos上直接用yum安裝:
yum install -y convmv
假如,轉碼命令爲:
convmv  -f
源編碼 -t 目標編碼  --notest  filename 
我想,大多數狀況下,由於這個文件名是亂碼,因此沒有辦法去表示它,只好使用通配:
convmv -f GBK -t UTF-8  --notest  *.txt

此時瀏覽器內容顯示的是亂碼,查看一下發現瀏覽器的顯示格式爲utf-8,改一下GBK的,這樣就顯示正常了

 

c.node5上安裝nginx+php

編譯安裝nginx

# tar xfnginx-1.6.1.tar.gz -C /usr/local/

首先添加用戶nginx,實現以之運行nginx服務進程:

# groupadd -rnginx

# useradd -r -gnginx nginx

安裝一些依賴的包

# yum install -ygcc gcc-c++ pcre-devel openssl-devel

接着開始編譯和安裝:

# ./configure--prefix=/usr/local/nginx --error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid--lock-path=/var/lock/nginx.lock --user=nginx --group=nginx--with-http_ssl_module --with-http_flv_module --with-http_stub_status_module--with-http_gzip_static_module--http-client-body-temp-path=/usr/local/nginx/client--http-proxy-temp-path=/usr/local/nginx/proxy --with-pcre

# make &&make install

提供啓動腳本,/etc/rc.d/init.d/nginx

#!/bin/sh

#

# nginx - this scriptstarts 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 networkingconfiguration.

. /etc/sysconfig/network

 

# Check that networking isup.

[ "$NETWORKING"= "no" ] && exit 0

 

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

 

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

 

[ -f /etc/sysconfig/nginx] && . /etc/sysconfig/nginx

 

lockfile=/var/lock/subsys/nginx

 

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

然後爲此腳本賦予執行權限:

# chmod +x/etc/rc.d/init.d/nginx

添加至服務管理列表,並讓其開機自動啓動:

# chkconfig --addnginx

# chkconfig nginxon

然後就能夠啓動服務並測試了:

# service nginxstart

# ss -tnlp | grep80

 

安裝phpMySQL獨立部署爲一臺機器

解壓

# tar xfphp-5.4.26.tar.bz2 -C /usr/local/

安裝依賴的包:

#yuminstall -y libxml2-devel bzip2-devel libmcrypt-devel libcurl-devel

說明:

這裏爲了支持apacheworkerevent這兩個MPM,編譯時使用了--enable-maintainer-zts選項。

若是使用PHP5.3以上版本,爲了連接MySQL數據庫,能夠指定mysqlnd,這樣在本機就不須要先安裝MySQLMySQL開發包了。mysqlndphp 5.3開始可用,能夠編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定造成依賴),但從PHP 5.4開始它就是默認設置了。

# ./configure --with-mysql=mysqlnd--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

編譯安裝libmcrypt

# tar zxvflibmcrypt-2.5.8.tar.gz

# cdlibmcrypt-2.5.8

# ./configure

# make &&make install

配置

# ./configure--prefix=/usr/local/php --with-mysql=mysqlnd --with-openssl --enable-fpm--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-mbstring--with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir--with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt --with-config-file-path=/etc/php --with-config-file-scan-dir=/etc/php--with-bz2 --with-curl

編譯和安裝

#make &&make install

啓動fastcgi

# cp/usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

# cpphp.ini-production /etc/php.ini

# cpsapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

# chmod +x/etc/rc.d/init.d/php-fpm

# chkconfig --addphp-fpm

# vim/usr/local/php/etc/php-fpm.conf

啓用以下選項:

pm.max_children =50

pm.start_servers =5

pm.min_spare_servers= 2

pm.max_spare_servers= 8

pid =/var/run/php-fpm.pid

/usr/local/nginx/conf/fastcgi_params中的內容替換爲

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;

啓用nginx配置文件中

        location / {

            root   html;

            index index.php index.htmlindex.htm; 須要加上index.php

        }

.....

        location ~ \.php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi_params;

        }

# cat /usr/local/nginx/html/index.php

<?php

   phpinfo();

?>

#service php-fpmstart

測試訪問

相關文章
相關標籤/搜索