<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Life - WeiG &#187; nginx</title>
	<atom:link href="http://www.weigblog.com/tag/nginx/feed" rel="self" type="application/rss+xml" />
	<link>http://www.weigblog.com</link>
	<description>Yet another Life</description>
	<lastBuildDate>Thu, 05 Jan 2012 03:13:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>解决nginx和php-fastcgi上传大文件的问题</title>
		<link>http://www.weigblog.com/2009/10/03/nginx-php-fastcgi-upload-big-files.html</link>
		<comments>http://www.weigblog.com/2009/10/03/nginx-php-fastcgi-upload-big-files.html#comments</comments>
		<pubDate>Sat, 03 Oct 2009 14:26:51 +0000</pubDate>
		<dc:creator>Wei</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[body]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[max]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[size]]></category>

		<guid isPermaLink="false">http://www.weigblog.com/?p=495</guid>
		<description><![CDATA[近来需要在blog中上传一些比较大的照片，却发现无论是Flash Uploader还是Web Uploader均无法上传。经过一番试验，发现这种情况仅发生在上传较大图片的时候，而对于几百KB的图片却不出现问题。 我的Server使用了nginx和php-fastcgi，经过检查php的配置文件，发现upload_max_filesize、post_max_size都不应该会影响上传。从phpinfo()来看，这些配置也都正确读入了。经过查看/var/log/nginx/error.log，发现其最下面几行出现日志： 既然log是nginx报出来的，那问题自然出现在nginx上。经过查询nginx的wiki，解决方案如下： 在/etc/nginx/nginx.conf中添加如下配置： 之后运行/etc/init.d/nginx reload重新载入配置文件，上传搞定。]]></description>
			<content:encoded><![CDATA[<p>近来需要在blog中上传一些比较大的照片，却发现无论是Flash Uploader还是Web Uploader均无法上传。经过一番试验，发现这种情况仅发生在上传较大图片的时候，而对于几百KB的图片却不出现问题。</p>
<p>我的Server使用了nginx和php-fastcgi，经过检查php的配置文件，发现upload_max_filesize、post_max_size都不应该会影响上传。从phpinfo()来看，这些配置也都正确读入了。经过查看/var/log/nginx/error.log，发现其最下面几行出现日志：</p>
<pre class="brush: plain; title: ; notranslate">
2009/10/03 22:06:23 [error] 6029#0: *20 client intended to send too large body: 1345385 bytes, client: x.x.x.x, server: weigblog.com, request: &quot;POST /wp-admin/async-upload.php HTTP/1.1&quot;, host: &quot;www.weigblog.com&quot;
</pre>
<p>既然log是nginx报出来的，那问题自然出现在nginx上。经过查询nginx的wiki，解决方案如下：</p>
<p>在/etc/nginx/nginx.conf中添加如下配置：</p>
<pre class="brush: bash; highlight: [3]; title: ; notranslate">
http {
        ...
        client_max_body_size 100m;
        ...
}
</pre>
<p>之后运行/etc/init.d/nginx reload重新载入配置文件，上传搞定。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.weigblog.com/2009/10/03/nginx-php-fastcgi-upload-big-files.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Nginx下运行perl-cgi脚本</title>
		<link>http://www.weigblog.com/2009/09/16/using-per-cgi-in-nginx.html</link>
		<comments>http://www.weigblog.com/2009/09/16/using-per-cgi-in-nginx.html#comments</comments>
		<pubDate>Wed, 16 Sep 2009 14:26:37 +0000</pubDate>
		<dc:creator>Wei</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[cgi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[pl]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.weigblog.com/?p=487</guid>
		<description><![CDATA[把Web Server更换为Nginx后，发现BugZilla不能用了。打开网站显示403 Forbidden，想来是因为BugZilla使用Perl CGI运行的原因。查了Nginx为数不多的文档，发现Nginx不能像其他Web Server（例如Apache）那样直接运行perl-cgi的脚本。 试用几个不同的方法后，发现确实有方法可以比较简单的实现perl-cgi的功能： 首先下载一个Perl Wrapper，我把它另存为~/perl-fastcgi.pl。 修改perl-fastcgi.pl的属性，添加可执行权限。运行该文件，该脚本会创建一个/var/run/nginx/perl_cgi-dispatch.sock文件。 修改nginx的配置文件，在server section中添加： 配置工作就此完成，重新启动nginx即可。 对于BugZilla，可能还需要运行http://domain.tld/testagent.cgi。]]></description>
			<content:encoded><![CDATA[<p>把Web Server更换为Nginx后，发现BugZilla不能用了。打开网站显示403 Forbidden，想来是因为BugZilla使用Perl CGI运行的原因。查了Nginx为数不多的文档，发现Nginx不能像其他Web Server（例如Apache）那样直接运行perl-cgi的脚本。</p>
<p>试用几个不同的方法后，发现确实有方法可以比较简单的实现perl-cgi的功能：</p>
<p>首先下载一个<a href="http://technotes.1000lines.net/fastcgi-wrapper.pl">Perl Wrapper</a>，我把它另存为~/perl-fastcgi.pl。</p>
<p>修改perl-fastcgi.pl的属性，添加可执行权限。运行该文件，该脚本会创建一个/var/run/nginx/perl_cgi-dispatch.sock文件。</p>
<p>修改nginx的配置文件，在server section中添加：</p>
<pre class="brush: bash; title: ; notranslate">
location ~ \.cgi$ {
        root           /srv/www/domain.tld/public_html;
        fastcgi_pass    unix:/var/run/nginx/perl_cgi-dispatch.sock;
        fastcgi_index   index.cgi;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include         fastcgi_params;
}
</pre>
<p>配置工作就此完成，重新启动nginx即可。</p>
<p>对于BugZilla，可能还需要运行http://domain.tld/testagent.cgi。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.weigblog.com/2009/09/16/using-per-cgi-in-nginx.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Web服务器更换到Nginx</title>
		<link>http://www.weigblog.com/2009/09/16/web-services-change-to-nginx.html</link>
		<comments>http://www.weigblog.com/2009/09/16/web-services-change-to-nginx.html#comments</comments>
		<pubDate>Wed, 16 Sep 2009 12:29:47 +0000</pubDate>
		<dc:creator>Wei</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[lemp]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.weigblog.com/?p=480</guid>
		<description><![CDATA[禁不住诱惑，还是把Web服务器更换为Nginx（读音[engine x]），这个俄罗斯人写的高性能的web服务器。[因为在Linode360方案中，使用Apache如果想达到比较好的性能，确实会比较频繁的出现OOM；要避免OOM，就只能减少并发处理能力和内存配置] Debian Lenny自带的nginx是0.6x的，而目前最新版本是0.7x。因此决定，从官方网站安装。 本文简单介绍了完整的安装过程。 首先安装必要的package，这些package将会在后面的过程中用到： 接下来下载并安装nginx（注意，下载的地址的可能会发生变化，可以参考http://wiki.nginx.org/NginxInstall#Stable）： 安装spawn-fcgi（曾经lighttpd的一部分，用来管理php-cgi进程） 创建nginx和php-fastcgi的init脚本 /etc/init.d/nginx文件内容： /etc/init.d/php-fastcgi文件内容： 创建nginx配置文件/etc/nginx/nginx.conf（并实现VirtualHost） 创建VirtualHost文件/etc/nginx/sites-available/domain.tld Enable VirualHost 启动php-fastcgi和nginx 配置php-fastcgi和nginx自动启动 此时，php的配置文件使用/etc/php5/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为存在文件]]></description>
			<content:encoded><![CDATA[<p>禁不住诱惑，还是把Web服务器更换为Nginx（读音[engine x]），这个俄罗斯人写的高性能的web服务器。[因为在Linode360方案中，使用Apache如果想达到比较好的性能，确实会比较频繁的出现OOM；要避免OOM，就只能减少并发处理能力和内存配置]</p>
<p>Debian Lenny自带的nginx是0.6x的，而目前最新版本是0.7x。因此决定，从官方网站安装。</p>
<p>本文简单介绍了完整的安装过程。</p>
<p>首先安装必要的package，这些package将会在后面的过程中用到：</p>
<pre class="brush: bash; title: ; notranslate">
$ sudo apt-get install libssl-dev libpcre3-dev build-essential
$ sudo apt-get install php5 php5-cgi mysql-server mysql-client
</pre>
<p>接下来下载并安装nginx（注意，下载的地址的可能会发生变化，可以参考<a href="http://wiki.nginx.org/NginxInstall#Stable">http://wiki.nginx.org/NginxInstall#Stable</a>）：</p>
<pre class="brush: bash; title: ; notranslate">
$ 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
</pre>
<p>安装spawn-fcgi（曾经lighttpd的一部分，用来管理php-cgi进程）</p>
<pre class="brush: bash; title: ; notranslate">
$ 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/
</pre>
<p>创建nginx和php-fastcgi的init脚本</p>
<pre class="brush: bash; title: ; notranslate">
$ 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
</pre>
<p>/etc/init.d/nginx文件内容：</p>
<pre class="brush: bash; title: ; notranslate">
#! /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
#          &lt;jason.giedymin AT acronymlabs.com&gt;.
#
# 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
# &quot;Software&quot;), 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 &quot;AS IS&quot;, 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=&quot;Nginx Server...&quot;

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=&quot;/etc/nginx/nginx.conf&quot;

#------------------------------------------------------------------------------
#                               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 [ &quot;${isAlive}&quot; -eq $TRUE ]; then
                echo &quot;$NAME found running with processes:  `pidof $PS`&quot;
        else
                echo &quot;$NAME is NOT running.&quot;
        fi

}

removePIDFile(){
        if [ -f $PIDSPATH/$NAME.pid ]; then
                rm $PIDSPATH/$NAME.pid
        fi
}

start() {
        log_daemon_msg &quot;Starting $DESCRIPTION&quot;

        isRunning
        isAlive=$?

        if [ &quot;${isAlive}&quot; -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 &quot;Stopping $DESCRIPTION&quot;

        isRunning
        isAlive=$?
        if [ &quot;${isAlive}&quot; -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 &quot;Reloading (via HUP) $DESCRIPTION&quot;

        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 &quot;Force terminating (via KILL) $DESCRIPTION&quot;

        PIDS=`pidof $PS` || true

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

        for i in $PIDS; do
                if [ &quot;$i&quot; = &quot;$PIDS2&quot; ]; then
                        kill $i
                        removePIDFile
                fi
        done

        log_end_msg $SCRIPT_OK

}

pidof_daemon() {
    PIDS=`pidof $PS` || true

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

    for i in $PIDS; do
        if [ &quot;$i&quot; = &quot;$PIDS2&quot; ]; then
            return 1
        fi
    done
    return 0
}

case &quot;$1&quot; in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|force-reload)
        stop
        start
        ;;
  reload)
        $1
        ;;
  status)
        status
        ;;
  configtest)
        $1
        ;;
  terminate)
        $1
        ;;
  *)
        FULLPATH=/etc/init.d/$NAME
        echo &quot;Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|terminate}&quot;
        exit 1
        ;;
esac

exit 0
</pre>
<p>/etc/init.d/php-fastcgi文件内容：</p>
<pre class="brush: bash; title: ; notranslate">
#! /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 &lt;[EMAIL PROTECTED]&gt;

# Do NOT &quot;set -e&quot;

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=&quot;php-cgi in external FASTCGI mode&quot;
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 &quot;$DAEMON&quot; ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] &amp;&amp; . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (&gt;= 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 [ &quot;$START&quot; != &quot;yes&quot; -a &quot;$1&quot; != &quot;stop&quot; ]; then
        log_warning_msg &quot;To enable $NAME, edit /etc/default/$NAME and set START=yes&quot;
        exit 0
fi

# Process configuration
export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS=&quot;-q -b $FCGI_HOST:$FCGI_PORT -c $PHP_CONFIG_FILE&quot;

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 &gt; /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 &gt; /dev/null # --name $DAEMON
        RETVAL=&quot;$?&quot;
        [ &quot;$RETVAL&quot; = 2 ] &amp;&amp; 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
        [ &quot;$?&quot; = 2 ] &amp;&amp; return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return &quot;$RETVAL&quot;
}
case &quot;$1&quot; in
  start)
        [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_daemon_msg &quot;Starting $DESC&quot; &quot;$NAME&quot;
        do_start
        case &quot;$?&quot; in
                0|1) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 0 ;;
                2) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_daemon_msg &quot;Stopping $DESC&quot; &quot;$NAME&quot;
        do_stop
        case &quot;$?&quot; in
                0|1) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 0 ;;
                2) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 1 ;;
        esac
        ;;
  restart|force-reload)
        log_daemon_msg &quot;Restarting $DESC&quot; &quot;$NAME&quot;
        do_stop
        case &quot;$?&quot; in
          0|1)
                do_start
                case &quot;$?&quot; 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 &quot;Usage: $SCRIPTNAME {start|stop|restart|force-reload}&quot; &gt;&amp;2
        exit 3
        ;;
esac
</pre>
<p>创建nginx配置文件/etc/nginx/nginx.conf（并实现VirtualHost）</p>
<pre class="brush: bash; title: ; notranslate">
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的
}
</pre>
<p>创建VirtualHost文件/etc/nginx/sites-available/domain.tld</p>
<pre class="brush: bash; title: ; notranslate">
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;
        }
}
</pre>
<p>Enable VirualHost</p>
<pre class="brush: bash; title: ; notranslate">
$ sudo ln -s /etc/nginx/sites-available/domain.tld /etc/nginx/sites-enabled/domain.tld
</pre>
<p>启动php-fastcgi和nginx</p>
<pre class="brush: bash; title: ; notranslate">
$ sudo /etc/init.d/php-fastcgi start
$ sudo /etc/init.d/nginx start
</pre>
<p>配置php-fastcgi和nginx自动启动</p>
<pre class="brush: bash; title: ; notranslate">
$ sudo apt-get install rcconf
$ sudo rcconf # 选中php-fastcgi和nginx
</pre>
<p>此时，php的配置文件使用/etc/php5/cgi/php.ini。</p>
<p>创建WordPress的rewrite rule：修改/etc/nginx/sites-available/domain.tld，在location /中添加如下的内容：</p>
<pre class="brush:shell; highlight: [4, 5, 6];">
location / {
        root   /srv/www/weigblog.com/public_html;
        index  index.html index.htm index.php;
        if (!-e $request_filename) {
                rewrite (.*) /index.php;
        }
}
</pre>
<p>其中：<br />
-e为存在目录或文件<br />
-d为存在目录<br />
-f为存在文件</p>
]]></content:encoded>
			<wfw:commentRss>http://www.weigblog.com/2009/09/16/web-services-change-to-nginx.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

