<?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://www.hebaodans.com/tag/nginx%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hebaodans.com</link>
	<description>好的心态是成功的开始</description>
	<lastBuildDate>Tue, 20 Jul 2010 17:32:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>强大的负载均衡+静态文件WEB服务器 nginx实战</title>
		<link>http://www.hebaodans.com/2009/03/qiang-da-de-fu-zai-jun-heng-jing-tai-wen-jian-w-e-b-fu-wu-qi-n-g-i-n-x-shi-zhan/</link>
		<comments>http://www.hebaodans.com/2009/03/qiang-da-de-fu-zai-jun-heng-jing-tai-wen-jian-w-e-b-fu-wu-qi-n-g-i-n-x-shi-zhan/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 02:47:40 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[nginx]]></category>
		<category><![CDATA[nginx实例]]></category>
		<category><![CDATA[nginx负载均衡]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=341</guid>
		<description><![CDATA[  当前比较流行的负载均衡前端服务器主要有apache(with mod_proxy)，nginx，lighttpd，squid，perlbal，pound，或者如果你的域名服务商提供DNS级别的负载均衡，也可以（就是一个域名随机指向多个IP，定制性不高）。     以前自己常用pound作为前端，它专注于负载均衡，支持https协议，配置还算简单，不过渐渐发现功能不够强大，转而研究其他一些既可以做负载均衡，又能做web服务器的高性能工具吧。Perlbal是第一个看的，大牛Danga的杰作，它们开发的memcached（分布式内存cache系统）非常好用，Perlbal也不差，虽然是基于Perl的，速度上比纯C开发的可能稍逊，但不得不说Danga大牛实力非凡。不过公司的机器都是perl5.8.5，而Perlbal必须perl5.8.8以上，升级可能有兼容性问题，故只能作罢。     转而研究nginx：Nginx (&#8220;engine X&#8221;) 是一个高性能的 HTTP 和 反向代理 服务器，也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的，它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版，但是，Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。      中文维基地址：http://wiki.codemongers.com/NginxChs 模块依赖： 1 gzip支持，需要zlib http://www.zlib.net/ 下载最新版即可 2 rewrite module requires pcre library http://www.pcre.org/ 下载最新版即可 3 ssl 功能需要 openssl 库 http://www.openssl.org/ =&#62; http://www.openssl.org/source/ LASTEST版本即可   安装过程： #下载以上source到/usr/local/src/nginx/目录下，解压，则该目录下情况如下： [root@s16 nginx]# ls [...]]]></description>
			<content:encoded><![CDATA[<p>  当前比较流行的负载均衡前端服务器主要有apache(with mod_proxy)，<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>，lighttpd，squid，perlbal，pound，或者如果你的域名服务商提供DNS级别的负载均衡，也可以（就是一个域名随机指向多个IP，定制性不高）。</p>
<p>    以前自己常用pound作为前端，它专注于负载均衡，支持https协议，配置还算简单，不过渐渐发现功能不够强大，转而研究其他一些既可以做负载均衡，又能做web服务器的高性能工具吧。Perlbal是第一个看的，大牛Danga的杰作，它们开发的memcached（分布式内存cache系统）非常好用，Perlbal也不差，虽然是基于Perl的，速度上比纯C开发的可能稍逊，但不得不说Danga大牛实力非凡。不过公司的机器都是perl5.8.5，而Perlbal必须perl5.8.8以上，升级可能有兼容性问题，故只能作罢。</p>
<p>    转而研究<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>：<span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span> (&#8220;engine X&#8221;) 是一个高性能的 HTTP 和 反向代理 服务器，也是一个 IMAP/POP3/SMTP 代理服务器。 <span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span> 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的，它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版，但是，<span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span> 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。 </p>
<p>    中文维基地址：http://wiki.codemongers.com/NginxChs</p>
<p>模块依赖：<br />
1 gzip支持，需要zlib http://www.zlib.net/ 下载最新版即可<br />
2 rewrite module requires pcre library http://www.pcre.org/ 下载最新版即可<br />
3 ssl 功能需要 openssl 库 http://www.openssl.org/ =&gt; http://www.openssl.org/source/ LASTEST版本即可</p>
<p> </p>
<p>安装过程：</p>
<p>#下载以上source到/usr/local/src/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>/目录下，解压，则该目录下情况如下：<br />
[root@s16 <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>]# ls<br />
<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>-0.6.32  <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>-0.6.32.tar.gz  openssl-0.9.8i  openssl-0.9.8i.tar.gz  pcre-7.8  pcre-7.8.tar.gz  zlib-1.2.3  zlib-1.2.3.tar.gz</p>
<p>cd <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>-0.6.32<br />
./configure &#8211;with-pcre=../pcre-7.8 &#8211;with-zlib=../zlib-1.2.3 &#8211;with-openssl=../openssl-0.9.8i<br />
make<br />
make install</p>
<p> </p>
<p>#OK，安装完成<br />
#修改配置：<br />
cd /usr/local/<span style="background-color: #ffff00;"><span class="hilite1">nginx</span><br />
</span>vi conf/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.conf<br />
#例如，去掉例子中的8000端口的服务器配置的注释<br />
sbin/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span> -t -c conf/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.conf （测试配置文件是否正确）<br />
[root@s16 <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>]# sbin/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span> -t -c conf/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.conf  <br />
2008/09/17 15:26:55 [info] 15879#0: the configuration file conf/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.conf syntax is ok<br />
2008/09/17 15:26:55 [info] 15879#0: the configuration file conf/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.conf was tested successfully</p>
<p> </p>
<p>sbin/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>  （启动）<br />
ps aux | grep <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span> | grep -v grep （查看是否正常启动了）<br />
#如果没有正常启动，查看errorlog，默认位置：/usr/local/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>/logs/error.log</p>
<p> </p>
<p>#经过apache bench测试，<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>在serve静态文件方面性能不比apache(with mod_perl)好多少，基本上，以65K为分界点，小文件时<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>性能好（最高可以达到3倍左右速度），大文件时apache性能好（不过差别有限），所以纯从速度上来讲，<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>并不比apache强，不过<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>小巧，消耗资源少，如果你有很多静态小文件需要serve，的确是个不错的选择哦。</p>
<p>     这里推荐一种架构：</p>
<p>     1 前端<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>，并serve静态文件，如图片，js，css等，<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>是支持gzip压缩的</p>
<p>     2 后端动态程序用fastcgi（lighttpd的spawn_fcgi即可），可以支持php，perl等多种脚本语言了</p>
<p> </p>
<p>     下面介绍一下<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>的常用配置：</p>
<ol>
<li>静态文件用<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>直接serve：</li>
</ol>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span>代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://touya.javaeye.com/blog/258480#"><img src="http://touya.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol class="dp-default">
<li><span><span>#css|js|ico|gif|jpg|jpeg|png|txt|html|htm|xml|swf|wav这些都是静态文件，但应分辨，js、css可能经常会变，过期时间应小一些，图片、html基本不变，过期时间可以设长一些   </span></span></li>
<li><span>location ~* ^.+\.(ico|gif|jpg|jpeg|png|html|htm)$ {   </span></li>
<li><span>    root         /var/www/poseidon/root/static;   </span></li>
<li><span>    access_log   off;   </span></li>
<li><span>    expires      30d;   </span></li>
<li><span>}   </span></li>
<li><span>location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {   </span></li>
<li><span>    root         /var/www/poseidon/root/static;   </span></li>
<li><span>    access_log   off;   </span></li>
<li><span>    expires      24h;   </span></li>
<li><span>}   </span></li>
<li><span>#注：location不包括?后面带的参数，所以以上正则可以匹配http://</span><span class="number"><span style="color: #c00000;">192.168</span></span><span>.</span><span class="number"><span style="color: #c00000;">1.16</span></span><span>/image/sxxx.jpg?a=xxx   </span></li>
</ol>
</div>
<pre class="nginx" style="display: none;">#css|js|ico|gif|jpg|jpeg|png|txt|html|htm|xml|swf|wav这些都是静态文件，但应分辨，js、css可能经常会变，过期时间应小一些，图片、html基本不变，过期时间可以设长一些
location ~* ^.+\.(ico|gif|jpg|jpeg|png|html|htm)$ {
    root         /var/www/poseidon/root/static;
    access_log   off;
    expires      30d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
    root         /var/www/poseidon/root/static;
    access_log   off;
    expires      24h;
}
#注：location不包括?后面带的参数，所以以上正则可以匹配http://192.168.1.16/image/sxxx.jpg?a=xxx </pre>
<ol>
<li>打开gzip，压缩传输
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span>代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://touya.javaeye.com/blog/258480#"><img src="http://touya.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol class="dp-default">
<li><span><span>gzip on;   </span></span></li>
<li><span>gzip_comp_level </span><span class="number"><span style="color: #c00000;">7</span></span><span>;   </span></li>
<li><span>gzip_min_length  </span><span class="number"><span style="color: #c00000;">1100</span></span><span>; #需要压缩的最小长度   </span></li>
<li><span>gzip_buffers    </span><span class="number"><span style="color: #c00000;">4</span></span><span> 8k;   </span></li>
<li><span>gzip_types      text/plain application/javascript text/css text/xml application/x-httpd-php; #指定需要压缩的文件类型   </span></li>
<li><span>output_buffers  </span><span class="number"><span style="color: #c00000;">1</span></span><span> 32k;   </span></li>
<li><span>postpone_output  </span><span class="number"><span style="color: #c00000;">1460</span></span><span>;  </span></li>
</ol>
</div>
<pre class="nginx" style="display: none;">gzip on;
gzip_comp_level 7;
gzip_min_length  1100; #需要压缩的最小长度
gzip_buffers    4 8k;
gzip_types      text/plain application/javascript text/css text/xml application/x-httpd-php; #指定需要压缩的文件类型
output_buffers  1 32k;
postpone_output  1460;</pre>
<p> </li>
</ol>
<ol>
<li>查看<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>的状态
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span>代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://touya.javaeye.com/blog/258480#"><img src="http://touya.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol class="dp-default">
<li><span><span>#设定查看<span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span>状态的地址(非默认安装模块，需要在编译时加上&#8211;with-http_stub_status_module)   </span></span></li>
<li><span>location /NginxStatus {   </span></li>
<li><span>    stub_status            on;   </span></li>
<li><span>    access_log             on;   </span></li>
<li><span>    auth_basic             </span><span class="string"><span style="color: #0000ff;">&#8220;NginxStatus&#8221;</span></span><span>;   </span></li>
<li><span>    auth_basic_user_file   /var/www/poseidon/root/passwd;   </span></li>
<li><span>}  </span></li>
</ol>
</div>
<pre class="nginx" style="display: none;">#设定查看<span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span>状态的地址(非默认安装模块，需要在编译时加上--with-http_stub_status_module)
location /NginxStatus {
    stub_status            on;
    access_log             on;
    auth_basic             "NginxStatus";
    auth_basic_user_file   /var/www/poseidon/root/passwd;
}</pre>
<p> </li>
<li>使用<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>的rewrite模块
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span class="hilite1"><span style="background-color: #ffff00;">Nginx</span></span>代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://touya.javaeye.com/blog/258480#"><img src="http://touya.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol class="dp-default">
<li><span><span>#强大的rewrite模块：   </span></span></li>
<li><span>#文档：http://wiki.codemongers.com/NginxHttpRewriteModule   </span></li>
<li><span>#经典示例：rewrites http://www.mydomain.nl/foo =&gt; http://mydomain.nl/foo   </span></li>
<li><span>if ($host ~* www\.(.*)) {   </span></li>
<li><span>  set $host_without_www $</span><span class="number"><span style="color: #c00000;">1</span></span><span>;   </span></li>
<li><span>  rewrite ^(.*)$ http://$host_without_www$</span><span class="number"><span style="color: #c00000;">1</span></span><span> permanent; # $</span><span class="number"><span style="color: #c00000;">1</span></span><span> contains </span><span class="string"><span style="color: #0000ff;">&#8216;/foo&#8217;</span></span><span>, not </span><span class="string"><span style="color: #0000ff;">&#8216;www.mydomain.nl/foo&#8217;</span></span><span>  </span></li>
<li><span>}   </span></li>
<li><span>  </span></li>
<li><span>#我们的应用：rewrites 所有非www.popovivi.com的访问 =&gt; http://www.popovivi.com/xxx   </span></li>
<li><span>if ($host != </span><span class="string"><span style="color: #0000ff;">&#8220;www.popovivi.com&#8221;</span></span><span>) {   </span></li>
<li><span>    rewrite ^(.*)$ http://www.popovivi.com$</span><span class="number"><span style="color: #c00000;">1</span></span><span> permanent;   </span></li>
<li><span>}  </span></li>
</ol>
</div>
<pre class="nginx" style="display: none;">#强大的rewrite模块：
#文档：http://wiki.codemongers.com/NginxHttpRewriteModule
#经典示例：rewrites http://www.mydomain.nl/foo =&gt; http://mydomain.nl/foo
if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.nl/foo'
}

#我们的应用：rewrites 所有非www.popovivi.com的访问 =&gt; http://www.popovivi.com/xxx
if ($host != "www.popovivi.com") {
    rewrite ^(.*)$ http://www.popovivi.com$1 permanent;
}</pre>
<p> </li>
<li>最常见的<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>+fastcgi+php的使用
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://touya.javaeye.com/blog/258480#"><img src="http://touya.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol class="dp-default">
<li><span><span>#<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>+fastcgi+php-cgi套路：   </span></span></li>
<li><span>wget lighttpd1.</span><span class="number"><span style="color: #c00000;">4.19</span></span><span>(or later)   </span></li>
<li><span>wget php5.</span><span class="number"><span style="color: #c00000;">2.6</span></span><span>(or later)   </span></li>
<li><span>./configure &#8211;prefix=/usr/local/lighttpd   </span></li>
<li><span>make &amp; make install   </span></li>
<li><span>./configure &#8211;prefix=/usr/local/php-</span><span class="number"><span style="color: #c00000;">5.2</span></span><span>.</span><span class="number"><span style="color: #c00000;">6</span></span><span> &#8211;enable-fastcgi &#8211;enable-sockets &#8211;enable-force-cgi-redirect &#8211;with-gd &#8211;enable-mbstring &#8211;with-zlib &#8211;with-mysql &#8211;with-gettext &#8211;with-mcrypt &#8211;with-mime-magic &#8211;with-openssl    </span></li>
<li><span>make &amp; make test &amp; make install(php.ini的默认读取位置为[prefix]/lib)   </span></li>
<li><span>cp php.ini-dist /usr/local/php-</span><span class="number"><span style="color: #c00000;">5.2</span></span><span>.</span><span class="number"><span style="color: #c00000;">6</span></span><span>/lib/php.ini   </span></li>
<li><span>/usr/local/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>/sbin/spawn-fcgi -a </span><span class="number"><span style="color: #c00000;">127.0</span></span><span>.</span><span class="number"><span style="color: #c00000;">0.1</span></span><span> -p </span><span class="number"><span style="color: #c00000;">10005</span></span><span> -u nobody -g nobody -f /usr/local/php-</span><span class="number"><span style="color: #c00000;">5.2</span></span><span>.</span><span class="number"><span style="color: #c00000;">6</span></span><span>/bin/php-cgi -P /var/run/fastcgi.pid -C </span><span class="number"><span style="color: #c00000;">15</span></span><span>  </span></li>
<li><span>  </span></li>
<li><span>#修改<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>的配置文件，使用fastcgi_pass http://</span><span class="number"><span style="color: #c00000;">127.0</span></span><span>.</span><span class="number"><span style="color: #c00000;">0.1</span></span><span>:</span><span class="number"><span style="color: #c00000;">10005</span></span><span>作为后端   </span></li>
<li><span>kill -HUP `cat /var/run/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.pid`  #重启<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>  </span></li>
</ol>
</div>
<pre class="Shell" style="display: none;">#<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>+fastcgi+php-cgi套路：
wget lighttpd1.4.19(or later)
wget php5.2.6(or later)
./configure --prefix=/usr/local/lighttpd
make &amp; make install
./configure --prefix=/usr/local/php-5.2.6 --enable-fastcgi --enable-sockets --enable-force-cgi-redirect --with-gd --enable-mbstring --with-zlib --with-mysql --with-gettext --with-mcrypt --with-mime-magic --with-openssl
make &amp; make test &amp; make install(php.ini的默认读取位置为[prefix]/lib)
cp php.ini-dist /usr/local/php-5.2.6/lib/php.ini
/usr/local/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>/sbin/spawn-fcgi -a 127.0.0.1 -p 10005 -u nobody -g nobody -f /usr/local/php-5.2.6/bin/php-cgi -P /var/run/fastcgi.pid -C 15

#修改<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>的配置文件，使用fastcgi_pass http://127.0.0.1:10005作为后端
kill -HUP `cat /var/run/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.pid`  #重启<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span></pre>
<p> </li>
<li><span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>+fastcgi+catalyst(for perl users):
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://touya.javaeye.com/blog/258480#"><img src="http://touya.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol class="dp-default">
<li><span><span>#Catalyst自带文档：   </span></span></li>
<li><span>#http://dev.catalyst.perl.org/wiki//gettingstarted/howtos/deploy/lighttpd_fastcgi.view?rev=</span><span class="number"><span style="color: #c00000;">22</span></span><span>  </span></li>
<li><span>#以上文档介绍的是lighttpd和catalyst的结合，本质是一样的   </span></li>
<li><span>#实际上也就是用自动生成的script/[myapp]_fastcgi.pl来启动，剩下的事，就随意啦（只是用什么来做前端而已）   </span></li>
<li><span>#首先安装FCGI模块   </span></li>
<li><span>cpan   </span></li>
<li><span>install FCGI   </span></li>
<li><span>install FCGI::ProcManager   </span></li>
<li><span>  </span></li>
<li><span>cd /var/www/project/script   </span></li>
<li><span>chmod </span><span class="number"><span style="color: #c00000;">755</span></span><span> project_fastcgi.pl   </span></li>
<li><span>./project_fastcgi.pl -listen </span><span class="number"><span style="color: #c00000;">127.0</span></span><span>.</span><span class="number"><span style="color: #c00000;">0.1</span></span><span>:</span><span class="number"><span style="color: #c00000;">3003</span></span><span> -nproc </span><span class="number"><span style="color: #c00000;">10</span></span><span> -pidfile /var/run/fcgi_catalyst.pid -daemon   </span></li>
<li><span>  </span></li>
<li><span>#<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>中，配置：   </span></li>
<li><span>location / {   </span></li>
<li><span>    fastcgi_pass </span><span class="number"><span style="color: #c00000;">127.0</span></span><span>.</span><span class="number"><span style="color: #c00000;">0.1</span></span><span>:</span><span class="number"><span style="color: #c00000;">3003</span></span><span>;   </span></li>
<li><span>    include /var/www/project/root/fastcgi.conf;   </span></li>
<li><span>}   </span></li>
<li><span>#fastcgi.conf详细(注意点：将SCRIPT_NAME替换成PATH_INFO即可)   </span></li>
<li><span>fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;   </span></li>
<li><span>fastcgi_param  QUERY_STRING       $query_string;   </span></li>
<li><span>fastcgi_param  REQUEST_METHOD     $request_method;   </span></li>
<li><span>fastcgi_param  CONTENT_TYPE       $content_type;   </span></li>
<li><span>fastcgi_param  CONTENT_LENGTH     $content_length;   </span></li>
<li><span>#fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;   </span></li>
<li><span>fastcgi_param  PATH_INFO          $fastcgi_script_name;   </span></li>
<li><span>fastcgi_param  REQUEST_URI        $request_uri;   </span></li>
<li><span>fastcgi_param  DOCUMENT_URI       $document_uri;   </span></li>
<li><span>fastcgi_param  DOCUMENT_ROOT      $document_root;   </span></li>
<li><span>fastcgi_param  SERVER_PROTOCOL    $server_protocol;   </span></li>
<li><span>fastcgi_param  GATEWAY_INTERFACE  CGI/</span><span class="number"><span style="color: #c00000;">1.1</span></span><span>;   </span></li>
<li><span>fastcgi_param  SERVER_SOFTWARE    <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>/$nginx_version;   </span></li>
<li><span>fastcgi_param  REMOTE_ADDR        $remote_addr;   </span></li>
<li><span>fastcgi_param  REMOTE_PORT        $remote_port;   </span></li>
<li><span>fastcgi_param  SERVER_ADDR        $server_addr;   </span></li>
<li><span>fastcgi_param  SERVER_PORT        $server_port;   </span></li>
<li><span>fastcgi_param  SERVER_NAME        $server_name;  </span></li>
</ol>
</div>
<pre class="Shell" style="display: none;">#Catalyst自带文档：
#http://dev.catalyst.perl.org/wiki//gettingstarted/howtos/deploy/lighttpd_fastcgi.view?rev=22
#以上文档介绍的是lighttpd和catalyst的结合，本质是一样的
#实际上也就是用自动生成的script/[myapp]_fastcgi.pl来启动，剩下的事，就随意啦（只是用什么来做前端而已）
#首先安装FCGI模块
cpan
install FCGI
install FCGI::ProcManager

cd /var/www/project/script
chmod 755 project_fastcgi.pl
./project_fastcgi.pl -listen 127.0.0.1:3003 -nproc 10 -pidfile /var/run/fcgi_catalyst.pid -daemon

#<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>中，配置：
location / {
    fastcgi_pass 127.0.0.1:3003;
    include /var/www/project/root/fastcgi.conf;
}
#fastcgi.conf详细(注意点：将SCRIPT_NAME替换成PATH_INFO即可)
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
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_NAME        $fastcgi_script_name;
fastcgi_param  PATH_INFO          $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  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>/$nginx_version;
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;</pre>
<p> </li>
</ol>
<p>     最后，因为<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>没有方便的控制命令可用，经常要ps，kill等直接控制，比较麻烦，可以为它写一个启动脚本，例子如下：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://touya.javaeye.com/blog/258480#"><img src="http://touya.javaeye.com/images/icon_copy.gif" alt="复制代码" /></a></div>
</div>
<ol class="dp-default">
<li><span><span>#!/bin/sh   </span></span></li>
<li><span>#   </span></li>
<li><span># description: Starts, stops <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>   </span></li>
<li><span>#   </span></li>
<li><span>#chkconfig: </span><span class="number"><span style="color: #c00000;">2345</span></span><span> </span><span class="number"><span style="color: #c00000;">20</span></span><span> </span><span class="number"><span style="color: #c00000;">80</span></span><span>  </span></li>
<li><span>#dscription: Startup script for <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span> webserver on CentOS. Place in /etc/init.d    </span></li>
<li><span>#   </span></li>
<li><span># Author: Touya   </span></li>
<li><span>set -e   </span></li>
<li><span>  </span></li>
<li><span>PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin   </span></li>
<li><span>DESC=</span><span class="string"><span style="color: #0000ff;">&#8220;</span><span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span><span style="color: #0000ff;"> daemon&#8221;</span></span><span>  </span></li>
<li><span>NAME=<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>   </span></li>
<li><span>DAEMON=/usr/local/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>/sbin/$NAME   </span></li>
<li><span>CONFIGFILE=/var/www/poseidon/root/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.conf   </span></li>
<li><span>PIDFILE=/var/run/$NAME.pid   </span></li>
<li><span>SCRIPTNAME=/etc/init.d/$NAME   </span></li>
<li><span>  </span></li>
<li><span># Gracefully exit if the package has been removed.   </span></li>
<li><span>test -x $DAEMON || exit </span><span class="number"><span style="color: #c00000;">0</span></span><span>  </span></li>
<li><span>  </span></li>
<li><span>d_start() {   </span></li>
<li><span>echo </span><span class="string"><span style="color: #0000ff;">&#8220;Starting $DESC: $NAME&#8221;</span></span><span>  </span></li>
<li><span>$DAEMON -c $CONFIGFILE || echo </span><span class="string"><span style="color: #0000ff;">&#8220;already running&#8221;</span></span><span>  </span></li>
<li><span>}   </span></li>
<li><span>  </span></li>
<li><span>d_stop() {   </span></li>
<li><span>echo </span><span class="string"><span style="color: #0000ff;">&#8220;Stopping $DESC: $NAME&#8221;</span></span><span>  </span></li>
<li><span>test -f $PIDFILE &amp;&amp; kill -QUIT `cat $PIDFILE`   </span></li>
<li><span>}   </span></li>
<li><span>  </span></li>
<li><span>d_reload() {   </span></li>
<li><span>echo </span><span class="string"><span style="color: #0000ff;">&#8220;Reloading $DESC configuration…&#8221;</span></span><span>  </span></li>
<li><span>kill -HUP `cat $PIDFILE` || echo </span><span class="string"><span style="color: #0000ff;">&#8220;can’t reload&#8221;</span></span><span>  </span></li>
<li><span>}   </span></li>
<li><span>case </span><span class="string"><span style="color: #0000ff;">&#8220;$1&#8243;</span></span><span> in   </span></li>
<li><span class="string"><span style="color: #0000ff;">&#8216;start&#8217;</span></span><span>)   </span></li>
<li><span>    d_start   </span></li>
<li><span>    echo </span><span class="string"><span style="color: #0000ff;">&#8220;started.&#8221;</span></span><span>  </span></li>
<li><span>;;   </span></li>
<li><span class="string"><span style="color: #0000ff;">&#8216;stop&#8217;</span></span><span>)   </span></li>
<li><span>    d_stop   </span></li>
<li><span>    echo </span><span class="string"><span style="color: #0000ff;">&#8220;stoped.&#8221;</span></span><span>  </span></li>
<li><span>;;   </span></li>
<li><span class="string"><span style="color: #0000ff;">&#8216;reload&#8217;</span></span><span>)   </span></li>
<li><span>    d_reload   </span></li>
<li><span>    echo </span><span class="string"><span style="color: #0000ff;">&#8220;reloaded.&#8221;</span></span><span>  </span></li>
<li><span>;;   </span></li>
<li><span class="string"><span style="color: #0000ff;">&#8216;restart&#8217;</span></span><span>)   </span></li>
<li><span>    echo </span><span class="string"><span style="color: #0000ff;">&#8220;Restarting $DESC: $NAME &#8230;&#8221;</span></span><span>  </span></li>
<li><span>    d_stop   </span></li>
<li><span>    # One second might not be time enough for a daemon to stop,   </span></li>
<li><span>    # if this happens, d_start will fail (and dpkg will break if   </span></li>
<li><span>    # the package is being upgraded). Change the timeout if needed   </span></li>
<li><span>    # be, or change d_stop to have start-stop-daemon use &#8211;retry.   </span></li>
<li><span>    # Notice that using &#8211;retry slows down the shutdown process somewhat.   </span></li>
<li><span>    sleep </span><span class="number"><span style="color: #c00000;">3</span></span><span>  </span></li>
<li><span>    d_start   </span></li>
<li><span>    echo </span><span class="string"><span style="color: #0000ff;">&#8220;done.&#8221;</span></span><span>  </span></li>
<li><span>;;   </span></li>
<li><span class="string"><span style="color: #0000ff;">&#8216;list&#8217;</span></span><span>)   </span></li>
<li><span>    ps auxf | egrep </span><span class="string"><span style="color: #0000ff;">&#8216;(PID|</span><span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span><span style="color: #0000ff;">)&#8217;</span></span><span> | grep -v grep   </span></li>
<li><span>;;   </span></li>
<li><span class="string"><span style="color: #0000ff;">&#8216;test&#8217;</span></span><span>)   </span></li>
<li><span>    $DAEMON -t -c $CONFIGFILE   </span></li>
<li><span>;;   </span></li>
<li><span>*)   </span></li>
<li><span>echo </span><span class="string"><span style="color: #0000ff;">&#8220;Usage: $SCRIPTNAME {reload|list|test|start|stop|restart}&#8221;</span></span><span> &gt;&amp;</span><span class="number"><span style="color: #c00000;">2</span></span><span>  </span></li>
<li><span>exit </span><span class="number"><span style="color: #c00000;">3</span></span><span>  </span></li>
<li><span>;;   </span></li>
<li><span>esac   </span></li>
<li><span>exit </span><span class="number"><span style="color: #c00000;">0</span></span><span>  </span></li>
</ol>
</div>
<pre class="Shell" style="display: none;">#!/bin/sh
#
# description: Starts, stops <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>
#
#chkconfig: 2345 20 80
#dscription: Startup script for <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span> webserver on CentOS. Place in /etc/init.d
#
# Author: Touya
set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span> daemon"
NAME=<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>
DAEMON=/usr/local/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>/sbin/$NAME
CONFIGFILE=/var/www/poseidon/root/<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>.conf
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

d_start() {
echo "Starting $DESC: $NAME"
$DAEMON -c $CONFIGFILE || echo "already running"
}

d_stop() {
echo "Stopping $DESC: $NAME"
test -f $PIDFILE &amp;&amp; kill -QUIT `cat $PIDFILE`
}

d_reload() {
echo "Reloading $DESC configuration…"
kill -HUP `cat $PIDFILE` || echo "can’t reload"
}
case "$1" in
'start')
    d_start
    echo "started."
;;
'stop')
    d_stop
    echo "stoped."
;;
'reload')
    d_reload
    echo "reloaded."
;;
'restart')
    echo "Restarting $DESC: $NAME ..."
    d_stop
    # One second might not be time enough for a daemon to stop,
    # if this happens, d_start will fail (and dpkg will break if
    # the package is being upgraded). Change the timeout if needed
    # be, or change d_stop to have start-stop-daemon use --retry.
    # Notice that using --retry slows down the shutdown process somewhat.
    sleep 3
    d_start
    echo "done."
;;
'list')
    ps auxf | egrep '(PID|<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>)' | grep -v grep
;;
'test')
    $DAEMON -t -c $CONFIGFILE
;;
*)
echo "Usage: $SCRIPTNAME {reload|list|test|start|stop|restart}" &gt;&amp;2
exit 3
;;
esac
exit 0</pre>
<p>保存文件,并chmod 755 /etc/init.d/<span style="background-color: #ffff00;"><span class="hilite1">nginx</span><br />
</span>用chkconfig &#8211;list <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>查看是否是一个可用后台启动服务,如果是的话，可以直接执行chkconfig &#8211;add <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>，这个后台服务搞定（代码中不可省略：#chkconfig: 2345 20 80）<br />
接下可以用service <span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span> start|restart|stop来操作你的<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>服务器（restart时重新读入config）</p>
<p>怎么样？是不是方便多了？</p>
<p> </p>
<p>     小结：本文是我自己实践<span class="hilite1"><span style="background-color: #ffff00;">nginx</span></span>的整个经验总结，包括了前期准备、安装、配置、架构设计、和现有动态程序结合(公司使用的是Catalyst)、启动脚本等等，希望对大家有帮助，少走歪路</p>
<p>转载来源 <a href="http://touya.javaeye.com/blog/258480">http://touya.javaeye.com/blog/258480</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.hebaodans.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.hebaodans.com/2009/03/qiang-da-de-fu-zai-jun-heng-jing-tai-wen-jian-w-e-b-fu-wu-qi-n-g-i-n-x-shi-zhan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
