<?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>蓝色数据 &#187; nginx</title>
	<atom:link href="http://bluedata.org/tag/nginx/feed/" rel="self" type="application/rss+xml" />
	<link>http://bluedata.org</link>
	<description>奋斗是幸福的……</description>
	<lastBuildDate>Mon, 14 Sep 2009 01:53:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>nginx 使用 logrotate 回滚日志</title>
		<link>http://bluedata.org/2009/09/04/nginx-logrotate/</link>
		<comments>http://bluedata.org/2009/09/04/nginx-logrotate/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 07:28:49 +0000</pubDate>
		<dc:creator>Bluedata</dc:creator>
				<category><![CDATA[应用技术]]></category>
		<category><![CDATA[logrotate]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://bluedata.org/?p=293</guid>
		<description><![CDATA[vi /usr/local/nginx/conf/logrotate.conf
/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 www-data adm
    sharedscripts
    prerotate
    sleep 59
    endscript
    [...]]]></description>
			<content:encoded><![CDATA[<p>vi /usr/local/nginx/conf/logrotate.conf<br />
<coolcode linenum="off">/var/log/nginx/*.log {<br />
    daily<br />
    missingok<br />
    rotate 7<br />
    compress<br />
    delaycompress<br />
    notifempty<br />
    create 640 www-data adm<br />
    sharedscripts<br />
    prerotate<br />
    sleep 59<br />
    endscript<br />
    postrotate<br />
        if [ -f /var/run/nginx.pid ]; then<br />
          kill -USR1 `cat /var/run/nginx.pid`<br />
        fi<br />
    endscript<br />
}</coolcode></p>
<p>调试：<br />
logrotate -d /usr/local/nginx/conf/logrotate.conf</p>
<p>执行：<br />
logrotate -f /usr/local/nginx/conf/logrotate.conf</p>
<p>定期执行：<br />
vi /etc/crontab<br />
59 23 * * * root logrotate -f /usr/local/nginx/conf/logrotate.conf</p>
]]></content:encoded>
			<wfw:commentRss>http://bluedata.org/2009/09/04/nginx-logrotate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Debian Nginx 上安装 Nagios 3.2</title>
		<link>http://bluedata.org/2009/08/23/install_nagios_on_debian_nginx/</link>
		<comments>http://bluedata.org/2009/08/23/install_nagios_on_debian_nginx/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 14:01:50 +0000</pubDate>
		<dc:creator>Bluedata</dc:creator>
				<category><![CDATA[应用技术]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://bluedata.org/?p=267</guid>
		<description><![CDATA[下载所需软件：
http://www.nagios.org/download/
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.0.tar.gz
创建 nagios 用户和组：
groupadd nagios
useradd -g nagios -d /usr/local/nagios -s /bin/bash nagios
创建一个 nagcmd 组用于从 Web 接口执行外部命令，并将 nagios 用户和 Web 用户都加到这个组中：
groupadd nagcmd
usermod -G nagcmd nagios
usermod -G nagcmd www-data
安装 Nagios:
apt-get install libgd2-xpm-dev
The following NEW packages will be installed:
  defoma fontconfig-config libfontconfig1 libfreetype6 libgd2-xpm libjpeg62 libxpm4 ttf-dejavu ttf-dejavu-core ttf-dejavu-extra
tar zxvf nagios-3.2.0.tar.gz
cd nagios-3.2.0
./configure \
--prefix=/usr/local/nagios \
--with-command-group=nagcmd
make all
make install
make install-init
make [...]]]></description>
			<content:encoded><![CDATA[<p>下载所需软件：<br />
http://www.nagios.org/download/<br />
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.0.tar.gz</p>
<p>创建 nagios 用户和组：<br />
groupadd nagios<br />
useradd -g nagios -d /usr/local/nagios -s /bin/bash nagios</p>
<p>创建一个 nagcmd 组用于从 Web 接口执行外部命令，并将 nagios 用户和 Web 用户都加到这个组中：<br />
groupadd nagcmd<br />
usermod -G nagcmd nagios<br />
usermod -G nagcmd www-data</p>
<p>安装 Nagios:<br />
apt-get install libgd2-xpm-dev<br />
The following NEW packages will be installed:<br />
  defoma fontconfig-config libfontconfig1 libfreetype6 libgd2-xpm libjpeg62 libxpm4 ttf-dejavu ttf-dejavu-core ttf-dejavu-extra</p>
<p>tar zxvf nagios-3.2.0.tar.gz<br />
cd nagios-3.2.0<br />
./configure \<br />
--prefix=/usr/local/nagios \<br />
--with-command-group=nagcmd</p>
<p>make all</p>
<p>make install<br />
make install-init<br />
make install-config<br />
make install-commandmode</p>
<p><a href="http://bluedata.org/2009/08/21/nginx-cgi/" target="_blank">配置 Nginx 支持 CGI</a> ，然后在 Nginx 添加 Nagios 的配置如下：</p>
<p><coolcode linenum="off">server {<br />
    listen  80;<br />
    server_name  nagios.domain.com;<br />
    root  /usr/local/nagios/share;<br />
    index  index.php index.html;<br />
    location ~ .*\.php?$ {<br />
        fastcgi_pass  127.0.0.1:9000;<br />
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;<br />
        include  fastcgi_params;<br />
    }<br />
    location ~ .*\.cgi$ {<br />
        rewrite  ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;<br />
        fastcgi_pass  127.0.0.1:8999;<br />
        fastcgi_param  SCRIPT_FILENAME  /usr/local/nagios/sbin$fastcgi_script_name;<br />
        include  fastcgi_params;<br />
        auth_basic  "Nagios Access";<br />
        auth_basic_user_file  /usr/local/nagios/etc/htpasswd.users;<br />
    }<br />
    location /nagios {<br />
        alias  /usr/local/nagios/share;<br />
    }<br />
    location / {<br />
        auth_basic  "Nagios Access";<br />
        auth_basic_user_file  /usr/local/nagios/etc/htpasswd.users;<br />
    }<br />
}</coolcode></p>
<p>创建 Nagios Web 接口登录的用户：<br />
apt-get install apache2-utils<br />
The following NEW packages will be installed:<br />
  apache2-utils libapr1 libaprutil1 libldap-2.4-2 libpq5 libsqlite3-0</p>
<p>htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin</p>
<p>重启 Nginx:<br />
/etc/init.d/nginx restart</p>
<p>安装 Nagios 插件：<br />
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz<br />
tar zxvf nagios-plugins-1.4.13.tar.gz<br />
cd nagios-plugins-1.4.13<br />
./configure \<br />
--prefix=/usr/local/nagios \<br />
--with-nagios-group=nagcmd</p>
<p>make<br />
make install</p>
<p>添加 nagios 服务：<br />
sysv-rc-conf</p>
<p>检查配置文件是否有错误：<br />
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg</p>
<p>cgi 的权限验证问题：<br />
vi /usr/local/nagios/etc/cgi.cfg<br />
use_authentication=0</p>
<p>启动：<br />
/etc/init.d/nagios start</p>
<p>打开 http://nagios.domain.com 输入之前设置的用户名和密码就可以查看 nagios 的页面了。不过此时还只能看到 localhost 的状态。</p>
]]></content:encoded>
			<wfw:commentRss>http://bluedata.org/2009/08/23/install_nagios_on_debian_nginx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>配置 Nginx 支持 CGI</title>
		<link>http://bluedata.org/2009/08/21/nginx-cgi/</link>
		<comments>http://bluedata.org/2009/08/21/nginx-cgi/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 10:19:17 +0000</pubDate>
		<dc:creator>Bluedata</dc:creator>
				<category><![CDATA[应用技术]]></category>
		<category><![CDATA[程序设计]]></category>
		<category><![CDATA[cgi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://bluedata.org/?p=258</guid>
		<description><![CDATA[安装所需的 perl fcgi 模块：
apt-get install libfcgi-perl libfcgi-procmanager-perl
用 perl 写一个 daemon 程序来处理 cgi 文件：
vi /usr/local/bin/cgiwrap-fcgi.pl
#!/usr/bin/perl -w
use FCGI;
use Socket;
use FCGI::ProcManager;
sub shutdown { FCGI::CloseSocket($socket); exit; }
sub restart  { FCGI::CloseSocket($socket); &main; }
use sigtrap 'handler', \&#038;shutdown, 'normal-signals';
use sigtrap 'handler', \&#038;restart,  'HUP';
require 'syscall.ph';
use POSIX qw(setsid);
#&daemonize; we don't daemonize when running under runsv
#this keeps the program alive or something after [...]]]></description>
			<content:encoded><![CDATA[<p>安装所需的 perl fcgi 模块：<br />
apt-get install libfcgi-perl libfcgi-procmanager-perl</p>
<p>用 perl 写一个 daemon 程序来处理 cgi 文件：</p>
<p>vi /usr/local/bin/cgiwrap-fcgi.pl<br />
<coolcode linenum="off" lang="perl">#!/usr/bin/perl -w<br />
use FCGI;<br />
use Socket;<br />
use FCGI::ProcManager;<br />
sub shutdown { FCGI::CloseSocket($socket); exit; }<br />
sub restart  { FCGI::CloseSocket($socket); &main; }<br />
use sigtrap 'handler', \&#038;shutdown, 'normal-signals';<br />
use sigtrap 'handler', \&#038;restart,  'HUP';<br />
require 'syscall.ph';<br />
use POSIX qw(setsid);</p>
<p>#&daemonize; we don't daemonize when running under runsv<br />
#this keeps the program alive or something after exec'ing perl scripts<br />
END()   { }<br />
BEGIN() { }<br />
{<br />
    no warnings;<br />
    *CORE::GLOBAL::exit = sub { die "fakeexit\nrc=" . shift() . "\n"; };<br />
};<br />
eval q{exit};<br />
if ($@) {<br />
    exit unless $@ =~ /^fakeexit/;<br />
}<br />
&main;</p>
<p>sub daemonize() {<br />
    chdir '/' or die "Can't chdir to /: $!";<br />
    defined( my $pid = fork ) or die "Can't fork: $!";<br />
    exit if $pid;<br />
    setsid() or die "Can't start a new session: $!";<br />
    umask 0;<br />
}</p>
<p>sub main {</p>
<p>#$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 ); #use IP sockets<br />
#$socket = FCGI::OpenSocket( "/var/run/nginx/perl_cgi-dispatch.sock", 10 ); #use UNIX sockets - user running this script must have w access to the 'nginx' folder!!<br />
#foreach $item (keys %ENV) { delete $ENV{$item}; }<br />
    $proc_manager = FCGI::ProcManager->new( {n_processes => 5} );<br />
    $socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 )<br />
        ; #use UNIX sockets - user running this script must have w access to the 'nginx' folder!!<br />
    $request =<br />
        FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket,<br />
        &#038;FCGI::FAIL_ACCEPT_ON_INTR );<br />
    $proc_manager->pm_manage();<br />
    if ($request) { request_loop() }<br />
    FCGI::CloseSocket($socket);<br />
}</p>
<p>sub request_loop {<br />
    while ( $request->Accept() >= 0 ) {<br />
        $proc_manager->pm_pre_dispatch();</p>
<p>        #processing any STDIN input from WebServer (for CGI-POST actions)<br />
        $stdin_passthrough = '';<br />
        { no warnings; $req_len = 0 + $req_params{'CONTENT_LENGTH'}; };<br />
        if ( ( $req_params{'REQUEST_METHOD'} eq 'POST' ) &#038;& ( $req_len != 0 ) )<br />
        {<br />
            my $bytes_read = 0;<br />
            while ( $bytes_read < $req_len ) {<br />
                my $data = '';<br />
                my $bytes = read( STDIN, $data, ( $req_len - $bytes_read ) );<br />
                last if ( $bytes == 0 || !defined($bytes) );<br />
                $stdin_passthrough .= $data;<br />
                $bytes_read += $bytes;<br />
            }<br />
        }</p>
<p>        #running the cgi app<br />
        if (<br />
            ( -x $req_params{SCRIPT_FILENAME} ) &#038;&    #can I execute this?<br />
            ( -s $req_params{SCRIPT_FILENAME} ) &#038;&    #Is this file empty?<br />
            ( -r $req_params{SCRIPT_FILENAME} )       #can I read this file?<br />
            )<br />
        {<br />
            pipe( CHILD_RD,   PARENT_WR );<br />
            pipe( PARENT_ERR, CHILD_ERR );<br />
            my $pid = open( CHILD_O, "-|" );<br />
            unless ( defined($pid) ) {<br />
                print("Content-type: text/plain\r\n\r\n");<br />
                print<br />
"Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n";<br />
                next;<br />
            }<br />
            $oldfh = select(PARENT_ERR);<br />
            $|     = 1;<br />
            select(CHILD_O);<br />
            $| = 1;<br />
            select($oldfh);<br />
            if ( $pid > 0 ) {<br />
                close(CHILD_RD);<br />
                close(CHILD_ERR);<br />
                print PARENT_WR $stdin_passthrough;<br />
                close(PARENT_WR);<br />
                $rin = $rout = $ein = $eout = '';<br />
                vec( $rin, fileno(CHILD_O),    1 ) = 1;<br />
                vec( $rin, fileno(PARENT_ERR), 1 ) = 1;<br />
                $ein    = $rin;<br />
                $nfound = 0;</p>
<p>                while ( $nfound =<br />
                    select( $rout = $rin, undef, $ein = $eout, 10 ) )<br />
                {<br />
                    die "$!" unless $nfound != -1;<br />
                    $r1 = vec( $rout, fileno(PARENT_ERR), 1 ) == 1;<br />
                    $r2 = vec( $rout, fileno(CHILD_O),    1 ) == 1;<br />
                    $e1 = vec( $eout, fileno(PARENT_ERR), 1 ) == 1;<br />
                    $e2 = vec( $eout, fileno(CHILD_O),    1 ) == 1;</p>
<p>                    if ($r1) {<br />
                        while ( $bytes = read( PARENT_ERR, $errbytes, 4096 ) ) {<br />
                            print STDERR $errbytes;<br />
                        }<br />
                        if ($!) {<br />
                            $err = $!;<br />
                            die $!;<br />
                            vec( $rin, fileno(PARENT_ERR), 1 ) = 0<br />
                                unless ( $err == EINTR or $err == EAGAIN );<br />
                        }<br />
                    }<br />
                    if ($r2) {<br />
                        while ( $bytes = read( CHILD_O, $s, 4096 ) ) {<br />
                            print $s;<br />
                        }<br />
                        if ( !defined($bytes) ) {<br />
                            $err = $!;<br />
                            die $!;<br />
                            vec( $rin, fileno(CHILD_O), 1 ) = 0<br />
                                unless ( $err == EINTR or $err == EAGAIN );<br />
                        }<br />
                    }<br />
                    last if ( $e1 || $e2 );<br />
                }<br />
                close CHILD_RD;<br />
                close PARENT_ERR;<br />
                waitpid( $pid, 0 );<br />
            } else {<br />
                foreach $key ( keys %req_params ) {<br />
                    $ENV{$key} = $req_params{$key};<br />
                }</p>
<p>                # cd to the script's local directory<br />
                if ( $req_params{SCRIPT_FILENAME} =~ /^(.*)\/[^\/]+$/ ) {<br />
                    chdir $1;<br />
                }<br />
                close(PARENT_WR);</p>
<p>                #close(PARENT_ERR);<br />
                close(STDIN);<br />
                close(STDERR);</p>
<p>                #fcntl(CHILD_RD, F_DUPFD, 0);<br />
                syscall( &#038;SYS_dup2, fileno(CHILD_RD),  0 );<br />
                syscall( &#038;SYS_dup2, fileno(CHILD_ERR), 2 );</p>
<p>                #open(STDIN, "<&#038;CHILD_RD");<br />
                exec( $req_params{SCRIPT_FILENAME} );<br />
                die("exec failed");<br />
            }<br />
        } else {<br />
            print("Content-type: text/plain\r\n\r\n");<br />
            print<br />
"Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.\n";<br />
        }<br />
    }<br />
}</coolcode></p>
<p>注意文件中的这两行：<br />
#$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 );<br />
#$socket = FCGI::OpenSocket( "/var/run/nginx/perl_cgi-dispatch.sock", 10 );<br />
这两行都表示监听来自 perl CGI 的请求。<br />
其中 perl_cgi-dispatch.sock 表示使用 unix socket 响应 CGI 请求。<br />
127.0.0.1:8999 表示使用 TCP/IP 协议响应请求。<br />
需要使用哪种方式就在下面的 FCGI::OpenSocket 中填入相对应的内容。</p>
<p>启动：<br />
chmod +x /usr/local/bin/cgiwrap-fcgi.pl<br />
/usr/local/bin/cgiwrap-fcgi.pl > /dev/null 2>&#038;1 &#038;</p>
<p>配置 Nginx 的 location 处理 cgi 文件：<br />
<coolcode linenum="off">location ~ .*\.cgi$ {<br />
    fastcgi_pass  127.0.0.1:8999;<br />
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;<br />
    include  fastcgi_params;<br />
}</coolcode></p>
<p>测试：<br />
在 web 的根目录下创建一个 cgi 文件：<br />
vi test.cgi<br />
#!/usr/bin/perl<br />
print "Content-type: text/html\n\n";<br />
print "<html><body>Hello, world.</body></html>";</p>
<p>文件需要有可执行权限：<br />
chmod +x test.cgi</p>
<p>访问 http://www.domain.com/test.cgi 看看有没有输出。</p>
<p>cgiwrap-fcgi.pl 随 nginx 一起启动/关闭：<br />
修改 nginx 启动脚本：<br />
在 start 段加入：<br />
/usr/local/bin/cgiwrap-fcgi.pl > /dev/null 2>&#038;1 &#038;</p>
<p>在 stop 段加入：<br />
<coolcode linenum="off">PID=`/bin/netstat -npl | grep "127.0.0.1:8999" | awk '{print $7}' | cut -d "/" -f 1`<br />
while [ -n "$PID" ]<br />
do<br />
kill -9 "$PID"<br />
PID=`/bin/netstat -npl | grep "127.0.0.1:8999" | awk '{print $7}' | cut -d "/" -f 1`<br />
done</coolcode></p>
]]></content:encoded>
			<wfw:commentRss>http://bluedata.org/2009/08/21/nginx-cgi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在 Debian 上安装 Nginx</title>
		<link>http://bluedata.org/2009/08/11/install_nginx_on_debian/</link>
		<comments>http://bluedata.org/2009/08/11/install_nginx_on_debian/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 13:35:12 +0000</pubDate>
		<dc:creator>Bluedata</dc:creator>
				<category><![CDATA[应用技术]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://bluedata.org/?p=219</guid>
		<description><![CDATA[安装依赖的包：
apt-get install libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev
下载最新稳定版安装：
wget http://sysoev.ru/nginx/nginx-0.7.61.tar.gz
tar zxvf nginx-0.7.61.tar.gz
cd nginx-0.7.61
./configure \
--user=www-data \
--group=www-data \
--prefix=/usr/local/nginx \
--with-http_stub_status_module
make
make install
Nginx 的设置：
mkdir /var/log/nginx
vi /usr/local/nginx/conf/nginx.conf
user  www-data www-data;
worker_processes  2;
worker_cpu_affinity 01 10;
worker_rlimit_nofile  65536;
error_log  /var/log/nginx/error.log;
pid  /var/run/nginx.pid;
events {
    use  epoll;
    worker_connections  65536;
}
http {
    include  mime.types;
    default_type [...]]]></description>
			<content:encoded><![CDATA[<p>安装依赖的包：<br />
apt-get install libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev</p>
<p>下载最新稳定版安装：<br />
<coolcode linenum="off">wget http://sysoev.ru/nginx/nginx-0.7.61.tar.gz<br />
tar zxvf nginx-0.7.61.tar.gz<br />
cd nginx-0.7.61<br />
./configure \<br />
--user=www-data \<br />
--group=www-data \<br />
--prefix=/usr/local/nginx \<br />
--with-http_stub_status_module</p>
<p>make<br />
make install</coolcode></p>
<p>Nginx 的设置：<br />
mkdir /var/log/nginx<br />
vi /usr/local/nginx/conf/nginx.conf<br />
<coolcode linenum="off">user  www-data www-data;</p>
<p>worker_processes  2;</p>
<p>worker_cpu_affinity 01 10;</p>
<p>worker_rlimit_nofile  65536;</p>
<p>error_log  /var/log/nginx/error.log;</p>
<p>pid  /var/run/nginx.pid;</p>
<p>events {<br />
    use  epoll;<br />
    worker_connections  65536;<br />
}</p>
<p>http {<br />
    include  mime.types;<br />
    default_type  text/html;</p>
<p>    access_log  /var/log/nginx/access.log combined;</p>
<p>    sendfile        on;<br />
    tcp_nopush      on;<br />
    tcp_nodelay     on;</p>
<p>    keepalive_timeout  65;</p>
<p>    gzip  on;<br />
    gzip_min_length  1100;<br />
    gzip_buffers  4 8k;<br />
    gzip_types  text/css text/xml application/x-javascript text/plain;<br />
    gzip_comp_level  9;<br />
    gzip_proxied  any;<br />
    gzip_vary  on;<br />
    gzip_http_version  1.0;</p>
<p>    output_buffers  4 32k;<br />
    postpone_output  1460;</p>
<p>    client_header_buffer_size  128k;<br />
    large_client_header_buffers  4 256k;</p>
<p>    fastcgi_buffers  8 128k;</p>
<p>    client_header_timeout  1m;<br />
    client_body_timeout    1m;<br />
    client_max_body_size   8m;<br />
    send_timeout           1m;</p>
<p>    server {<br />
        listen       80;<br />
        server_name  _;<br />
        root  /home/www;<br />
        location ~ .*\.php?$ {<br />
            fastcgi_pass  127.0.0.1:9000;<br />
            include  fastcgi_params;<br />
        }<br />
        location ~* ^.+.(jpg|gif|png)$ {<br />
            expires  30d;<br />
        }<br />
        location /server-status {<br />
            stub_status  on;<br />
        }<br />
    }<br />
}</coolcode></p>
<p>并在 /usr/local/nginx/conf/fastcgi_params 中增加如下一行：<br />
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;</p>
<p>创建启动脚本：<br />
vi /etc/init.d/nginx<br />
<coolcode linenum="off" lang="cpp">#! /bin/sh</p>
<p>### BEGIN INIT INFO<br />
# Provides:          nginx<br />
# Required-Start:    $all<br />
# Required-Stop:     $all<br />
# Default-Start:     2 3 4 5<br />
# Default-Stop:      0 1 6<br />
# Short-Description: starts the nginx web server<br />
# Description:       starts nginx using start-stop-daemon<br />
### END INIT INFO</p>
<p>PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin<br />
DAEMON=/usr/local/nginx/sbin/nginx<br />
NAME=nginx<br />
DESC=nginx</p>
<p>test -x $DAEMON || exit 0</p>
<p># Include nginx defaults if available<br />
if [ -f /etc/default/nginx ] ; then<br />
        . /etc/default/nginx<br />
fi</p>
<p>set -e</p>
<p>case "$1" in<br />
  start)<br />
        echo -n "Starting $DESC: "<br />
        start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \<br />
                --exec $DAEMON -- $DAEMON_OPTS || true<br />
        echo "$NAME."<br />
        ;;<br />
  stop)<br />
        echo -n "Stopping $DESC: "<br />
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \<br />
                --exec $DAEMON || true<br />
        echo "$NAME."<br />
        ;;<br />
  restart|force-reload)<br />
        echo -n "Restarting $DESC: "<br />
        start-stop-daemon --stop --quiet --pidfile \<br />
                /var/run/$NAME.pid --exec $DAEMON || true<br />
        sleep 1<br />
        start-stop-daemon --start --quiet --pidfile \<br />
                /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true<br />
        echo "$NAME."<br />
        ;;<br />
  reload)<br />
      echo -n "Reloading $DESC configuration: "<br />
      start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \<br />
          --exec $DAEMON || true<br />
      echo "$NAME."<br />
      ;;<br />
  *)<br />
        N=/etc/init.d/$NAME<br />
        echo "Usage: $N {start|stop|restart|reload|force-reload}" >&#038;2<br />
        exit 1<br />
        ;;<br />
esac</p>
<p>exit 0</coolcode></p>
<p>chmod +x /etc/init.d/nginx</p>
<p>系统的相关设置：<br />
<coolcode linenum="off">echo -ne "<br />
fs.file-max = 65536<br />
" >> /etc/sysctl.conf<br />
sysctl -p</p>
<p>echo -ne "<br />
www-data soft nofile 65536<br />
www-data hard nofile 65536<br />
" >> /etc/security/limits.conf</coolcode></p>
<p>启动：<br />
/etc/init.d/nginx start</p>
<p>最后，设置 nginx 开机自启动：<br />
<coolcode linenum="off">sysv-rc-conf nginx on</p>
<p>sysv-rc-conf --list nginx<br />
nginx        2:on       3:on    4:on    5:on</coolcode></p>
]]></content:encoded>
			<wfw:commentRss>http://bluedata.org/2009/08/11/install_nginx_on_debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx PHP FastCGI 安装配置记录</title>
		<link>http://bluedata.org/2008/04/18/nginx-php-fastcgi/</link>
		<comments>http://bluedata.org/2008/04/18/nginx-php-fastcgi/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 10:26:47 +0000</pubDate>
		<dc:creator>Bluedata</dc:creator>
				<category><![CDATA[应用技术]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.bluedata.org/nginx-php-fastcgi/</guid>
		<description><![CDATA[安装 PHP
下载：http://www.php.net/downloads.php
因需要兼容老程序，这里用的还是 PHP4 ，可根据自己的需要更改编译选项。
tar jxvf php-4.4.8.tar.bz2
cd php-4.4.8
./configure \
--prefix=/usr/local/php-fcgi \
--enable-fastcgi \
--enable-discard-path \
--enable-force-cgi-redirect \
--enable-mbstring=all \
--enable-memcache \
--with-config-file-path=/usr/local/php-fcgi/etc \
--with-gd=/usr/local/gd \
--with-zlib \
--with-png \
--with-jpeg \
--with-freetype \
--with-mysql=/usr/local/mysql \
--with-dom
make
make install
cp -f php.ini-dist /usr/local/php-fcgi/etc/php.ini
安装 ZendOptimizer
Zend 的优化器，免费使用，如果加密了 PHP 程序文件，这是必须的。
如果没有使用 Zend 优化器，PHP 进程的内存会难以释放。
下载：http://www.zend.com/en/products/guard/downloads
tar zxvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-i386
./install
cd ..
安装 eAccelerator
PHP scripts 的缓存，对于提高 PHP 程序执行速度很有帮助。
下载：http://eaccelerator.net/
tar jxvf eaccelerator-0.9.5.2.tar.bz2
cd eaccelerator-0.9.5.2
/usr/local/php-fcgi/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php-fcgi/bin/php-config
make
make install
cd ..
安装 memcache
用于缓存 sql 查询，对于降低数据库压力，提升查询速度有很大好处。
下载：http://pecl.php.net/package/memcache
tar zxvf memcache-2.2.3.tgz
cd memcache-2.2.3
/usr/local/php-fcgi/bin/phpize
./configure --with-php-config=/usr/local/php-fcgi/bin/php-config
make
make [...]]]></description>
			<content:encoded><![CDATA[<p>安装 PHP<br />
下载：http://www.php.net/downloads.php<br />
因需要兼容老程序，这里用的还是 PHP4 ，可根据自己的需要更改编译选项。<br />
tar jxvf php-4.4.8.tar.bz2<br />
cd php-4.4.8<br />
./configure \<br />
--prefix=/usr/local/php-fcgi \<br />
--enable-fastcgi \<br />
--enable-discard-path \<br />
--enable-force-cgi-redirect \<br />
--enable-mbstring=all \<br />
--enable-memcache \<br />
--with-config-file-path=/usr/local/php-fcgi/etc \<br />
--with-gd=/usr/local/gd \<br />
--with-zlib \<br />
--with-png \<br />
--with-jpeg \<br />
--with-freetype \<br />
--with-mysql=/usr/local/mysql \<br />
--with-dom<br />
make<br />
make install<br />
cp -f php.ini-dist /usr/local/php-fcgi/etc/php.ini</p>
<p>安装 ZendOptimizer<br />
Zend 的优化器，免费使用，如果加密了 PHP 程序文件，这是必须的。<br />
如果没有使用 Zend 优化器，PHP 进程的内存会难以释放。<br />
下载：http://www.zend.com/en/products/guard/downloads<br />
tar zxvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz<br />
cd ZendOptimizer-3.3.3-linux-glibc23-i386<br />
./install<br />
cd ..</p>
<p>安装 eAccelerator<br />
PHP scripts 的缓存，对于提高 PHP 程序执行速度很有帮助。<br />
下载：http://eaccelerator.net/<br />
tar jxvf eaccelerator-0.9.5.2.tar.bz2<br />
cd eaccelerator-0.9.5.2<br />
/usr/local/php-fcgi/bin/phpize<br />
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php-fcgi/bin/php-config<br />
make<br />
make install<br />
cd ..</p>
<p>安装 memcache<br />
用于缓存 sql 查询，对于降低数据库压力，提升查询速度有很大好处。<br />
下载：http://pecl.php.net/package/memcache<br />
tar zxvf memcache-2.2.3.tgz<br />
cd memcache-2.2.3<br />
/usr/local/php-fcgi/bin/phpize<br />
./configure --with-php-config=/usr/local/php-fcgi/bin/php-config<br />
make<br />
make install</p>
<p>安装 Linghttpd's spawn-fcgi<br />
用 Lighttpd 的 spawn-fcgi 来管理 PHP FastCGI 进程。<br />
下载 Lighttpd: http://www.lighttpd.net/download<br />
yum -y install pcre-devel<br />
(debian: apt-get -y install libpcre3-dev)<br />
tar zxvf lighttpd-1.4.19.tar.bz2<br />
cd lighttpd-1.4.19<br />
./configure --without-bzip2<br />
make<br />
cp -a src/spawn-fcgi /usr/local/php-fcgi/bin/</p>
<p>安装 Nginx<br />
下载：http://nginx.net/<br />
tar zxvf nginx-0.5.35.tar.gz<br />
cd nginx-0.5.35<br />
./configure \<br />
--user=nobody \<br />
--group=nobody \<br />
--prefix=/usr/local/nginx \<br />
--with-http_stub_status_module<br />
make<br />
make install</p>
<p>配置 PHP<br />
vi /usr/local/php-fcgi/etc/php.ini<br />
# 最大执行时间<br />
max_execution_time = 5<br />
# 打开全局变量兼容老程序<br />
register_globals = On<br />
# 默认编码<br />
default_charset = "gbk"<br />
# 扩展模块的目录<br />
extension_dir = "/usr/local/php-fcgi/lib/php/extensions/no-debug-non-zts-20020429"<br />
# 关闭 mysql 持久连接。高访问量下会把数据库可用连接用完。<br />
mysql.allow_persistent = Off<br />
# 降低连接超时时间<br />
mysql.connect_timeout = 10<br />
# session 文件存储目录，这里为两级目录，需要手动创建。<br />
session.save_path = "2;/tmpfs/phpsession"<br />
# session 过期时间设为一小时。<br />
session.gc_maxlifetime = 3600<br />
# 关闭<br />
session.bug_compat_42 = 0<br />
session.bug_compat_warn = 0</p>
<p># 开启 eAccelerator<br />
[eAccelerator]<br />
extension="eaccelerator.so"<br />
# 可使用内存设为了 32M，太大会启动不了 PHP。<br />
eaccelerator.shm_size="32"<br />
eaccelerator.cache_dir="/tmpfs/eaccelerator"<br />
eaccelerator.enable="1"<br />
eaccelerator.optimizer="1"<br />
eaccelerator.check_mtime="1"<br />
eaccelerator.debug="0"<br />
eaccelerator.filter=""<br />
eaccelerator.shm_max="0"<br />
eaccelerator.shm_ttl="0"<br />
eaccelerator.shm_prune_period="0"<br />
eaccelerator.shm_only="0"<br />
eaccelerator.compress="1"<br />
eaccelerator.compress_level="9"</p>
<p># 在 eAccelerator 之后启用 ZO ，避免 eaccelerator.so 不能加载。<br />
[Zend]<br />
zend_optimizer.optimization_level=1023<br />
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.3<br />
zend_optimizer.version=3.3.3<br />
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so</p>
<p># 开启 memcache<br />
[memcache]<br />
extension=memcache.so</p>
<p>配置 Nginx<br />
建立相应目录<br />
mkdir /var/log/nginx<br />
cd /usr/local/nginx<br />
mv logs conf/vhosts<br />
cd conf<br />
vi nginx.conf<br />
<coolcode lang="c"><br />
# 运行 Nginx 的用户<br />
user  nobody nobody;<br />
# Nginx 的进程数<br />
worker_processes  8;</p>
<p># 错误日志<br />
error_log  /var/log/nginx/error.log;</p>
<p># pid 文件<br />
pid        /var/run/nginx.pid;</p>
<p>events {<br />
# 使用 epoll(For Linux Kernel 2.6+) 提升 Nginx 性能。<br />
    use  epoll;<br />
# 最大连接数<br />
    worker_connections  4096;<br />
}</p>
<p>http {<br />
# 包含 mime types 的配置文件<br />
    include       conf/mime.types;<br />
# 默认类型<br />
    default_type  application/octet-stream;</p>
<p># 定义 temp 的路径<br />
    client_body_temp_path  /tmpfs/nginx/client_body_temp;<br />
    proxy_temp_path        /tmpfs/nginx/proxy_temp;<br />
    fastcgi_temp_path      /tmpfs/nginx/fastcgi_temp;</p>
<p># 如果 server_name 定义的域名过多，需要增大这个值<br />
    server_names_hash_bucket_size  128;</p>
<p># 定义主访问日志格式，因开启了 gzip，加入了 $gzip_ratio<br />
    log_format  main  '$remote_addr - $remote_user [$time_local] $request '<br />
                      '"$status" $body_bytes_sent "$http_referer" '<br />
                      '"$http_user_agent" "$gzip_ratio"';</p>
<p># 默认的访问日志存放文件<br />
    access_log  /var/log/nginx/access.log  main;</p>
<p># Linux Kernel 2.4+ 可通过调用内核级 sendfile() 来提高性能<br />
    sendfile  on;</p>
<p># FreeBSD 或基于 TCP_CORK 的 Linux 系统可使用<br />
    tcp_nopush on;</p>
<p># 只在 keep-alive 连接状态中使用<br />
    tcp_nodelay  on;</p>
<p># 设置保持连接超时时间 和 header 超时时间（单位：秒）<br />
    keepalive_timeout  60 15;</p>
<p># 开启 gzip<br />
    gzip  on;<br />
# 压缩级别 1-9，9 为最高压缩级别<br />
    gzip_comp_level  9;<br />
# 回送给客户端最小的 gzip 压缩大小<br />
    gzip_min_length  1100;<br />
# 设置 gzip 缓存的大小，默认是 4-8k 之间<br />
    gzip_buffers  4 8k;<br />
# gzip http 版本<br />
    gzip_http_version  1.1;<br />
# 需要使用 gzip 压缩的文件类型<br />
    gzip_types  text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;</p>
<p># 定义默认主机<br />
    server {<br />
# 监听端口<br />
        listen       80;<br />
# 匹配所有域名<br />
        server_name  _ *;<br />
# 默认首页<br />
        index  index.php;<br />
# 根目录路径<br />
        root  /home/www;<br />
# 执行 php 程序文件的设置<br />
        location ~ .*\.php?$ {<br />
            include  conf/fcgi.conf;<br />
        }<br />
# 对于以下文件不记录访问日志<br />
        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {<br />
            access_log  off;<br />
        }<br />
    }</p>
<p># 包含其它虚拟主机的配置<br />
    include  conf/vhosts/*.conf;<br />
}<br />
</coolcode></p>
<p>vi fcgi.conf<br />
<coolcode lang="c"><br />
fastcgi_pass  127.0.0.1:10080;</p>
<p>fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;<br />
fastcgi_param  SERVER_SOFTWARE    nginx;</p>
<p>fastcgi_param  QUERY_STRING       $query_string;<br />
fastcgi_param  REQUEST_METHOD     $request_method;<br />
fastcgi_param  CONTENT_TYPE       $content_type;<br />
fastcgi_param  CONTENT_LENGTH     $content_length;</p>
<p>fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;<br />
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;<br />
fastcgi_param  REQUEST_URI        $request_uri;<br />
fastcgi_param  DOCUMENT_URI       $document_uri;<br />
fastcgi_param  DOCUMENT_ROOT      $document_root;<br />
fastcgi_param  SERVER_PROTOCOL    $server_protocol;</p>
<p>fastcgi_param  REMOTE_ADDR        $remote_addr;<br />
fastcgi_param  REMOTE_PORT        $remote_port;<br />
fastcgi_param  SERVER_ADDR        $server_addr;<br />
fastcgi_param  SERVER_PORT        $server_port;<br />
fastcgi_param  SERVER_NAME        $server_name;</p>
<p># PHP only, required if PHP was built with --enable-force-cgi-redirect<br />
fastcgi_param  REDIRECT_STATUS    200;<br />
</coolcode></p>
<p>再来配置 Discuz! 论坛和 SupeSite/X-Space 的虚拟主机<br />
vi vhosts/main.conf<br />
<coolcode lang="c"><br />
    server {<br />
    listen       80;<br />
# 分论坛可使用子域名<br />
    server_name  bbs.domain.com *.bbs.domain.com;<br />
    index  index.php;<br />
    root  /home/www/bbs;<br />
# 和 Apache Rewrite 规则很相似<br />
    rewrite  ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1;<br />
    rewrite  ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&#038;page=$2;<br />
    rewrite  ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&#038;extra=page\%3D$3&#038;page=$2;<br />
    rewrite  ^/space-(username|uid)-(.+)\.html$ /space.php?action=viewpro&#038;$1=$2;<br />
    rewrite  ^/tag-(.+)\.html$ /tag.php?name=$1;<br />
        location ~ .*\.php?$ {<br />
            include  conf/fcgi.conf;<br />
        }<br />
        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {<br />
            access_log  off;<br />
        }<br />
    }</p>
<p>    server {<br />
    listen       80;<br />
    server_name  blog.domain.com;<br />
    index  index.php;<br />
    root  /home/www/blog;<br />
    rewrite  ^([0-9]+)/spacelist(.*)$ index.php?$1/action_spacelist$2;<br />
    rewrite  ^([0-9]+)/viewspace_(.+)$ index.php?$1/action_viewspace_itemid_$2;<br />
    rewrite  ^([0-9]+)/viewbbs_(.+)$ index.php?$1/action_viewbbs_tid_$2;<br />
    rewrite  ^([0-9]+)/(.*)$ index.php?$1/$2;<br />
    rewrite  ^([0-9]+)$ index.php?$1;<br />
    rewrite  ^action_(.+)$ index.php?action_$1;<br />
    rewrite  ^category_(.+)$ index.php?action_category_catid_$1;<br />
    rewrite  ^itemlist_(.+)$ index.php?action_itemlist_catid_$1;<br />
    rewrite  ^viewnews_(.+)$ index.php?action_viewnews_itemid_$1;<br />
    rewrite  ^viewthread_(.+)$ index.php?action_viewthread_tid_$1;<br />
    rewrite  ^index([\.a-zA-Z0-9]*)$ index.php;<br />
    rewrite  ^html/([0-9]+)/viewnews_itemid_([0-9]+)\.html$ index.php?action_viewnews_itemid_$2;</p>
<p>    rewrite  ^/([0-9]+)/spacelist(.+)$ /index.php?uid/$1/action/spacelist/type$2;<br />
    rewrite  ^/([0-9]+)/viewspace(.+)$ /index.php?uid/$1/action/viewspace/itemid$2;<br />
    rewrite  ^/([0-9]+)/viewbbs(.+)$ /index.php?uid/$1/action/viewbbs/tid$2;<br />
    rewrite  ^/([0-9]+)/(.*)$ /index.php?uid/$1/$2;<br />
    rewrite  ^/([0-9]+)$ /index.php?uid/$1;</p>
<p>    rewrite  ^/action(.+)$ /index.php?action$1;<br />
    rewrite  ^/category(.+)$ /index.php?action/category/catid$1;<br />
    rewrite  ^/viewnews(.+)$ /index.php?action/viewnews/itemid$1;<br />
    rewrite  ^/viewthread(.+)$ /index.php?action/viewthread/tid$1;<br />
    rewrite  ^/mygroup(.+)$ /index.php?action/mygroup/gid$1;<br />
# 归档目录的默认首页设置<br />
        location /archiver/ {<br />
            index index.html;<br />
        }<br />
        location ~ .*\.php?$ {<br />
            include  conf/fcgi.conf;<br />
        }<br />
        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {<br />
            access_log  off;<br />
        }<br />
    }<br />
</coolcode></p>
<p>用 tmpfs 提升性能<br />
mkdir /tmpfs<br />
在 /etc/fstab 中加入<br />
tmpfs                   /tmpfs              tmpfs   size=256m,mode=1777        0 0</p>
<p>mount -a</p>
<p>创建相关目录<br />
vi /usr/local/sbin/mkdir.sh<br />
<coolcode lang="cpp" linenum="off"><br />
#/bin/sh</p>
<p>mkdir /tmpfs/nginx<br />
chown -R nobody:nobody /tmpfs/nginx<br />
chmod -R 1777 /tmpfs/nginx</p>
<p>mkdir /tmpfs/eaccelerator<br />
chown -R nobody:nobody /tmpfs/eaccelerator<br />
chmod -R 1777 /tmpfs/eaccelerator</p>
<p>I="0 1 2 3 4 5 6 7 8 9 a b c d e f"<br />
for acm in $I;<br />
do<br />
for x in $I;<br />
do<br />
mkdir -p /tmpfs/phpsession/$acm/$x;<br />
done;<br />
done<br />
chown -R nobody:nobody /tmpfs/phpsession<br />
chmod -R 1777 /tmpfs/phpsession<br />
</coolcode></p>
<p>chmod +x /usr/local/sbin/mkdir.sh<br />
mkdir.sh</p>
<p>启动 PHP 和 Nginx<br />
/usr/local/php-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 32 -u nobody -g nobody -f /usr/local/php-fcgi/bin/php<br />
监听在 127.0.0.1 的 10080 端口并开启 32 个进程，使用和 Nginx 一样的 nobody 用户。（PHP5 的执行程序是 php-cgi）<br />
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf<br />
重启 PHP 进程可以先 killall php 再启动。<br />
重启 Nginx<br />
kill -HUP `cat /var/run/nginx.pid`</p>
<p>清除超过一小时没有被访问到的 eAccelerator 缓存文件和创建时间超过一小时的 php session 文件，防止占满空间。<br />
vi /etc/crontab<br />
0 * * * * root find /tmpfs/eaccelerator -type f -amin +60 -exec rm {} \;<br />
0 * * * * root find /tmpfs/phpsession -type f -cmin +60 -exec rm {} \;</p>
<p>配置开机自启动<br />
vi /etc/rc.local<br />
/usr/local/sbin/mkdir.sh<br />
/usr/local/php-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 32 -u nobody -g nobody -f /usr/local/php-fcgi/bin/php<br />
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf</p>
<p>方便重启 Nginx<br />
vi ~/.bashrc<br />
alias nginx='kill -HUP `cat /var/run/nginx.pid`'</p>
<p>source ~/.bashrc</p>
]]></content:encoded>
			<wfw:commentRss>http://bluedata.org/2008/04/18/nginx-php-fastcgi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
