웹 서버 가 Nginx 로 바 뀌 었 습 니 다.

16572 단어 웹 서버
유혹 을 견 디 지 못 하고 웹 서버 를 Nginx (독음 [engine x]) 로 바 꾸 는 러시아인 이 쓴 고성능 웹 서버.[Linode 360 프로젝트 에서 Apache 를 사용 하면 비교적 좋 은 성능 을 얻 으 려 면 확실히 OOM 이 자주 나타 나 기 때 문 입 니 다. OOM 을 피 하려 면 병행 처리 능력 과 메모리 설정 만 줄 일 수 있 습 니 다]
데 비 안 레 니 가 자체 적 으로 가 져 온 nginx 는 0.6x 이 고 현재 최신 버 전 은 0.7x 이다.이에 따라 공식 홈 페이지 에서 설치 하기 로 했다.
본 고 는 완전한 설치 과정 을 간단하게 소개 하 였 다.
우선 필요 한 패 키 지 를 설치 합 니 다. 이 패 키 지 는 다음 과정 에서 사 용 됩 니 다.
$ sudo apt-get install libssl-dev libpcre3-dev build-essential

$ sudo apt-get install php5 php5-cgi mysql-server mysql-client

다음 에 nginx 를 다운로드 하고 설치 합 니 다 (주의, 다운로드 주소 가 변 할 수 있 습 니 다. 참고 http://wiki.nginx.org/NginxInstall#Stable:
$ wget http://sysoev.ru/nginx/nginx-0.7.62.tar.gz

$ tar -zxvf nginx-0.7.62.tar.gz

$ cd nginx-0.7.62

$ ./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid  --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --with-md5-asm --with-md5=/usr/include --with-sha1-asm --with-sha1=/usr/include --with-http_stub_status_module

$ make

$ sudo make install

spawn - fcgi 설치 (lighttpd 의 일부분, pp - cgi 프로 세 스 관리)
$ wget http://www.lighttpd.net/download/spawn-fcgi-1.6.2.tar.gz

$ tar -zxvf spawn-fcgi-1.6.2.tar.gz

$ cd spawn-fcgi-1.6.2

$ ./configure

$ make

$ sudo cp ./src/spawn-cgi /usr/bin/

nginx 와 php - fastcgi 의 init 스 크 립 트 만 들 기
$ sudo vi /etc/init.d/php-fastcgi

$ sudo vi /etc/init.d/nginx

$ sudo chmod +x /etc/init.d/php-fastcgi

$ sudo chmod +x /etc/init.d/nginx

/ etc / init. d / nginx 파일 내용:
#! /bin/sh

### BEGIN INIT INFO

# Provides:          nginx

# Required-Start:    $remote_fs $syslog

# Required-Stop:     $remote_fs $syslog

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: nginx init.d script for Ubuntu 8.10 and lesser versions.

# Description:       nginx init.d script for Ubuntu 8.10 and lesser versions.

### END INIT INFO

#------------------------------------------------------------------------------

# nginx - this script, which starts and stops the nginx daemon for ubuntu.

#

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server.  This \

#               script will manage the initiation of the \

#               server and its process state.

#

# processname: nginx

# config:      /usr/local/nginx/conf/nginx.conf

# pidfile:     /acronymlabs/server/nginx.pid

# Provides:    nginx

#

# Author:  Jason Giedymin

#          <jason.giedymin AT acronymlabs.com>.

#

# Version: 1.0 01-Apr-2009 jason.giedymin AT gmail.com

# Notes: nginx init.d script for Ubuntu 8.10 and lesser versions.

#

#------------------------------------------------------------------------------

#                               MIT X11 License

#------------------------------------------------------------------------------

#

# Copyright (c) 2009 Jason Giedymin, http://AcronymLabs.com

#

# Permission is hereby granted, free of charge, to any person obtaining

# a copy of this software and associated documentation files (the

# "Software"), to deal in the Software without restriction, including

# without limitation the rights to use, copy, modify, merge, publish,

# distribute, sublicense, and/or sell copies of the Software, and to

# permit persons to whom the Software is furnished to do so, subject to

# the following conditions:

#

# The above copyright notice and this permission notice shall be

# included in all copies or substantial portions of the Software.

#

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#------------------------------------------------------------------------------



#------------------------------------------------------------------------------

#                               Functions

#------------------------------------------------------------------------------

. /lib/lsb/init-functions



#------------------------------------------------------------------------------

#                               Consts

#------------------------------------------------------------------------------

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/usr/sbin/nginx



NAME=nginx

DESCRIPTION="Nginx Server..."



PIDSPATH=/var/run/nginx

PS=$NAME                                #the process, which happens to be the NAME

PIDFILE=$NAME.pid                       #pid file

RUNAS=root                              #user to run as



SCRIPT_OK=0                             #ala error codes

SCRIPT_ERROR=1                          #ala error codes

TRUE=1                                  #boolean

FALSE=0                                 #boolean



lockfile=/var/lock/subsys/nginx

NGINX_CONF_FILE="/etc/nginx/nginx.conf"



#------------------------------------------------------------------------------

#                               Simple Tests

#------------------------------------------------------------------------------



#test if nginx is a file and executable

test -x $DAEMON || exit 0



# Include nginx defaults if available

if [ -f /etc/default/nginx ] ; then

        . /etc/default/nginx

fi



#set exit condition

#set -e



#------------------------------------------------------------------------------

#                               Functions

#------------------------------------------------------------------------------



configtest() {

        $DAEMON -t -c $NGINX_CONF_FILE

}



getPSCount() {

        return `pgrep -f $PS | wc -l`

}



isRunning(){

        pidof_daemon

        PID=$?



        if [ $PID -gt 0 ]; then

                return 1

        else

                return 0

        fi

}



status(){

        isRunning

        isAlive=$?



        if [ "${isAlive}" -eq $TRUE ]; then

                echo "$NAME found running with processes:  `pidof $PS`"

        else

                echo "$NAME is NOT running."

        fi



}



removePIDFile(){

        if [ -f $PIDSPATH/$NAME.pid ]; then

                rm $PIDSPATH/$NAME.pid

        fi

}



start() {

        log_daemon_msg "Starting $DESCRIPTION"



        isRunning

        isAlive=$?



        if [ "${isAlive}" -eq $TRUE ]; then

                log_end_msg $SCRIPT_ERROR

        else

                start-stop-daemon --start --quiet --chuid $RUNAS --pidfile $PIDSPATH/$PIDFILE --exec $DAEMON

                chmod 400 $PIDSPATH/$PIDFILE

                log_end_msg $SCRIPT_OK

        fi

}



stop() {

        log_daemon_msg "Stopping $DESCRIPTION"



        isRunning

        isAlive=$?

        if [ "${isAlive}" -eq $TRUE ]; then

                start-stop-daemon --stop --quiet --pidfile $PIDSPATH/$PIDFILE



                removePIDFile



                log_end_msg $SCRIPT_OK

        else

                log_end_msg $SCRIPT_ERROR

        fi

}



reload() {

        configtest || return $?



        log_daemon_msg "Reloading (via HUP) $DESCRIPTION"



        isRunning

        if [ $? -eq $TRUE ]; then

                `killall -HUP $PS` #to be safe



                log_end_msg $SCRIPT_OK

        else

                log_end_msg $SCRIPT_ERROR

        fi

}



terminate() {

        log_daemon_msg "Force terminating (via KILL) $DESCRIPTION"



        PIDS=`pidof $PS` || true



        [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`



        for i in $PIDS; do

                if [ "$i" = "$PIDS2" ]; then

                        kill $i

                        removePIDFile

                fi

        done



        log_end_msg $SCRIPT_OK



}



pidof_daemon() {

    PIDS=`pidof $PS` || true



    [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`



    for i in $PIDS; do

        if [ "$i" = "$PIDS2" ]; then

            return 1

        fi

    done

    return 0



}



case "$1" in

  start)

        start

        ;;

  stop)

        stop

        ;;

  restart|force-reload)

        stop

        start

        ;;

  reload)

        $1

        ;;

  status)

        status

        ;;

  configtest)

        $1

        ;;

  terminate)

        $1

        ;;

  *)

        FULLPATH=/etc/init.d/$NAME

        echo "Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|terminate}"

        exit 1

        ;;

esac



exit 0

/ etc / init. d / php - fastcgi 파일 내용:
#! /bin/sh

### BEGIN INIT INFO

# Provides:          php-fastcgi

# Required-Start:    $all

# Required-Stop:     $all

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: Start and stop php-cgi in external FASTCGI mode

# Description:       Start and stop php-cgi in external FASTCGI mode

### END INIT INFO



# Author: Kurt Zankl <[EMAIL PROTECTED]>



# Do NOT "set -e"



PATH=/sbin:/usr/sbin:/bin:/usr/bin

DESC="php-cgi in external FASTCGI mode"

NAME=php-fastcgi

DAEMON=/usr/bin/php-cgi

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

PHP_CONFIG_FILE=/etc/php5/cgi/php.ini



# Exit if the package is not installed

[ -x "$DAEMON" ] || exit 0



# Read configuration variable file if it is present

[ -r /etc/default/$NAME ] && . /etc/default/$NAME



# Load the VERBOSE setting and other rcS variables

. /lib/init/vars.sh



# Define LSB log_* functions.

# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.

. /lib/lsb/init-functions



# If the daemon is not enabled, give the user a warning and then exit,

# unless we are stopping the daemon

if [ "$START" != "yes" -a "$1" != "stop" ]; then

        log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes"

        exit 0

fi



# Process configuration

export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS

DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT -c $PHP_CONFIG_FILE"



do_start()

{

        # Return

        #   0 if daemon has been started

        #   1 if daemon was already running

        #   2 if daemon could not be started

        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

                || return 1

        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \

                --background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- \

                $DAEMON_ARGS \

                || return 2

}



do_stop()

{

        # Return

        #   0 if daemon has been stopped

        #   1 if daemon was already stopped

        #   2 if daemon could not be stopped

        #   other if a failure occurred

        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null # --name $DAEMON

        RETVAL="$?"

        [ "$RETVAL" = 2 ] && return 2

        # Wait for children to finish too if this is a daemon that forks

        # and if the daemon is only ever run from this initscript.

        # If the above conditions are not satisfied then add some other code

        # that waits for the process to drop all resources that could be

        # needed by services started subsequently.  A last resort is to

        # sleep for some time.

        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON

        [ "$?" = 2 ] && return 2

        # Many daemons don't delete their pidfiles when they exit.

        rm -f $PIDFILE

        return "$RETVAL"

}

case "$1" in

  start)

        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"

        do_start

        case "$?" in

                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;

                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;

        esac

        ;;

  stop)

        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"

        do_stop

        case "$?" in

                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;

                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;

        esac

        ;;

  restart|force-reload)

        log_daemon_msg "Restarting $DESC" "$NAME"

        do_stop

        case "$?" in

          0|1)

                do_start

                case "$?" in

                        0) log_end_msg 0 ;;

                        1) log_end_msg 1 ;; # Old process is still running

                        *) log_end_msg 1 ;; # Failed to start

                esac

                ;;

          *)

                # Failed to stop

                log_end_msg 1

                ;;

        esac

        ;;

  *)

        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2

        exit 3

        ;;

esac

nginx 프로필 / etc / nginx / nginx. conf 만 들 기 (VirtualHost 구현)
user www-data www-data;

worker_processes  4;

events {

    worker_connections  1024;

    use epoll;

}

http {

        include       mime.types;

        default_type  application/octet-stream;

        sendfile        on;

        tcp_nopush     on;

        tcp_nodelay    on;





        keepalive_timeout  65;

        gzip  on;



        include /etc/nginx/sites-enabled/*; #       nginx VirtualHost 

}

VirtualHost 파일 / etc / nginx / sites - available / domain. tld 만 들 기
server {

        listen       80;

        server_name  domain.tld www.domain.tld;

        access_log      /srv/www/domain.tld/logs/access.log;

        location / {

                root   /srv/www/domain.tld/public_html;

                index  index.html index.htm index.php;

        }



        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

                root   /usr/html;

        }



        location ~ \.php$ {

                root           /srv/www/domain.tld/public_html;

                fastcgi_pass    127.0.0.1:9000;

                fastcgi_index  index.php;

                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

                include        fastcgi_params;

        }

}

Enable VirualHost
$ sudo ln -s /etc/nginx/sites-available/domain.tld /etc/nginx/sites-enabled/domain.tld

php - fastcgi 와 nginx 시작
$ sudo /etc/init.d/php-fastcgi start

$ sudo /etc/init.d/nginx start

php - fastcgi 와 nginx 자동 시작 설정
$ sudo apt-get install rcconf

$ sudo rcconf #   php-fastcgi nginx

이 때 php 설정 파일 은 / etc / php 5 / cgi / php. ini 를 사용 합 니 다.
WordPress 를 만 드 는 rewrite rule: 수정 / etc / nginx / sites - available / domain. tld, location / 에 다음 과 같은 내용 을 추가 합 니 다.
location / {

        root   /srv/www/weigblog.com/public_html;

        index  index.html index.htm index.php;

        if (!-e $request_filename) {

                rewrite (.*) /index.php;

        }

}

그 중: - e 는 디 렉 터 리 나 파일 - d 가 존재 하 는 디 렉 터 리 - f 가 존재 하 는 파일 입 니 다.

좋은 웹페이지 즐겨찾기