<?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; fastcgi</title>
	<atom:link href="http://www.hebaodans.com/tag/fastcgi/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>php-fpm fastcgi介绍</title>
		<link>http://www.hebaodans.com/2009/07/p-h-p-f-p-m-f-a-s-t-c-g-i-jie-shao/</link>
		<comments>http://www.hebaodans.com/2009/07/p-h-p-f-p-m-f-a-s-t-c-g-i-jie-shao/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 13:53:18 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[php-fpm]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=567</guid>
		<description><![CDATA[fast-cgi是做啥用的 FastCGI是一个可伸缩的，高速地在web server和脚本语言间交互的接口。关于FastCGI技术的更多信息可以在官方网站和这里看到。 多数流行的web server都支持FastCGI。包括Apache(mod_fastcgi和mod_fcgid)，Zeus，nginx和lighttpd。 FastCGI的主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上，以大规模扩展和改进安全性而不损失生产效率。 php-fpm可以和任何支持远端FastCGI的web server工作。 php-fpm是做啥用的 很不幸，官方网站php.net上的php在将FastCGI SAPI用于生产环境时有许多已知的问题。 下面的一些证据足以表明为什么离开了php-fpm，就很难使用FastCGI SAPI。 描述 php自带的 spawn-fcgi + spawn-php.sh + daemontools php-fpm php守护程序： pid file, log file, setsid(), setuid(), setgid(), chroot() (-) (+) (+) 进程控制，可以平滑地重启、重新载入配置和二进制模块而不丢失请求 php4 – php5 只能平滑停止 (-) (+) 限制ip地址，可以满足web server的要求 php4 (-) php5 (+) (从 5.2.2 开始) (-) (+) 根据负载动态调整进程数 (-) [...]]]></description>
			<content:encoded><![CDATA[<h3>fast-cgi是做啥用的</h3>
<p>FastCGI是一个可伸缩的，高速地在web server和脚本语言间交互的接口。关于FastCGI技术的更多信息可以在<a href="http://www.fastcgi.com/" target="_blank">官方网站</a>和<a href="http://en.wikipedia.org/wiki/FastCGI" target="_blank">这里</a>看到。</p>
<p>多数流行的web server都支持FastCGI。包括Apache(mod_fastcgi和mod_fcgid)，Zeus，nginx和lighttpd。</p>
<p>FastCGI的主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上，以大规模扩展和改进安全性而不损失生产效率。</p>
<p><span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/php-fpm/" title="View all posts in php-fpm" target="_blank">php-fpm</a></span>可以和任何支持远端FastCGI的web server工作。</p>
<h3><span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/php-fpm/" title="View all posts in php-fpm" target="_blank">php-fpm</a></span>是做啥用的</h3>
<p>很不幸，官方网站php.net上的php在将FastCGI SAPI用于生产环境时有许多已知的问题。</p>
<p>下面的一些证据足以表明为什么离开了<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/php-fpm/" title="View all posts in php-fpm" target="_blank">php-fpm</a></span>，就很难使用FastCGI SAPI。</p>
<table border="0">
<tbody>
<tr>
<th>描述</th>
<th>php自带的</th>
<th>spawn-fcgi + spawn-php.sh + daemontools</th>
<th>php-fpm</th>
</tr>
<tr>
<td>php守护程序： pid file, log file, setsid(), setuid(), setgid(), chroot()</td>
<td>(-)</td>
<td>(+)</td>
<td>(+)</td>
</tr>
<tr>
<td>进程控制，可以平滑地重启、重新载入配置和二进制模块而不丢失请求</td>
<td>php4 – php5 只能平滑停止</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>限制ip地址，可以满足web server的要求</td>
<td>php4 (-) php5 (+) (从 5.2.2 开始)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>根据负载动态调整进程数</td>
<td>(-)</td>
<td>(-)</td>
<td>Todo</td>
</tr>
<tr>
<td>使用用不同的uid / gid / chroot / 环境变量，不同的 php.ini 选项，不需要safe mode</td>
<td>(-)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>记录work process的stdout和stderr</td>
<td>(-)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>如果使用优化器，在遇到opcode缓存随机损坏的时候紧急重启所有进程</td>
<td>(-)</td>
<td>(-)</td>
<td>(+)</td>
</tr>
<tr>
<td>如果set_time_limit没有起作用，强制结束过期进程</td>
<td>(-)</td>
<td>(-)</td>
<td>Todo</td>
</tr>
<tr>
<td colspan="4">特色功能 Error header、优化的上传支持、fastcgi_finish_request()</td>
</tr>
</tbody>
</table>
<h3>特色功能</h3>
<p>所有的这些功能都是用不打断的方式。也就是说，如果你不使用他们，他们的存在不会影响php的功能，也就是透明的。</p>
<p>Error header</p>
<p>类型：方便</p>
<p>默认情况下，如果被访问的php脚本包含语法错误，用户会收到一个空的&#8221;200 ok&#8221;页。这是不方便的。Error header这个php.ini选项允许在这种情况下产生一个HTTP错误码，比如&#8221;HTTP/1.0 550 Server Made Big Boo&#8221;，从而中断web server请求并显示一个正确的错误页。如果要实现这样的功能，需要在php.ini中添加一条<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/fastcgi/" title="View all posts in fastcgi" target="_blank">fastcgi</a></span>.error_header = &#8220;HTTP/1.0 550 Server Made Big Boo&#8221;</p>
<p>在php-5.2.4中添加了类似的功能，不过是简化的。如果被访问的php脚本包含语法错误，并且display_errors设为false， 且没有进一步的设置，会立刻返回&#8221;HTTP/1.0 500 Internal Server Error&#8221;。如果你需要设定一个不同于500的错误码（已经在许多情况下被使用）。或者想要使这个行为独立于display_errors的设置，那么 可以使用<span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/fastcgi/" title="View all posts in fastcgi" target="_blank">fastcgi</a></span>.error_header。如果你同时使用php-5.2.5或以上版本和php-fpm，那么 <span class='wp_keywordlink_affiliate'><a href="http://www.hebaodans.com/tag/fastcgi/" title="View all posts in fastcgi" target="_blank">fastcgi</a></span>.error_header的优先级更高。</p>
<p>优化的上传支持</p>
<p>类型：优化</p>
<p>这个特性，就如标题那样，可以加速大POST请求的处理速度，包括文件上传。优化是通过确保请求体已写入一个临时文件，然后传递文件名而不是请求体 到fastcgi协议来实现的。目前，就我所知，只有nginx0.5.9以上才支持这个功能。显然，这种模式只在php和web server在一台机器上的时候才能用。</p>
<p>nginx样例配置：</p>
<p>location ~ \.php$ {<br />
fastcgi_pass_request_body off;<br />
client_body_in_file_only clean;<br />
fastcgi_param  REQUEST_BODY_FILE  $request_body_file;<br />
…<br />
fastcgi_pass …;<br />
}</p>
<p>在php中不需要配置任何东西。如果php收到了参数REQUEST_BODY_FILE，就读取其中的请求体，如果没有，就自行从fastcgi协议中读取请求体。</p>
<p>结合这个特性，可以考虑对临时文件使用内存文件系统，例如tmpfs(linux)：</p>
<p>client_body_temp_path /dev/shm/client_body_temp;</p>
<p>fastcgi_finish_request()</p>
<p>类型：优化</p>
<p>这个特性可以提高php处理请求的速度。如果有些处理可以在页面生成完后进行，就可以使用这种优化。比如，在memcached中保存 session就可以在页面交给web server后进行。fastcgi_finisth_request()，这一特性可以结束响应输出，web server可以立即开始交给等不及的客户端，而此刻，php可以在请求的上下文环境中处理许多事情。比如保存session，转换上传的视频，处理统计 等等。</p>
<p>fastcgi_finisth_request()会触发shutdown 函数运行。</p>
<h3>FAQ</h3>
<p>Q：php-fpm可以和ZendOptimize一起用吗？<br />
A：完全可以。</p>
<p>Q：php-fpm可以和ZendPlatform、xcache、eAccelerator、APCden等等的优化器一起用吗？<br />
A：是的。php-frpm的架构和任何一种用于高速opcode缓存的共享内存都适用。唯一的限制是：所有的worker进程只能适用一个缓存，即使它们用不同的uid/gid运行。</p>
<p>Q：为什么要用root运行php-fpm呢？这安全吗？<br />
A：用root启动php-fpm只有在你打算用不同uid/gid的 php来处理请求时才有意义意。比如，在共享主机上的不同站点。因为只有在master进程用root运行的时候，才可以建立不同uid/gid的子进 程。这是相当安全的。master进程自己从来不会去处理请求。<br />
在任何情况下，php-fpm都不会用root身份来处理请求。</p>
<p>Q：php-fpm可以加速请求处理速度吗？<br />
A：不，没有影响。不过，如果你使用一些特殊特性，对于一些特定的请求可以有些许性能提升。</p>
<p>Q：php-fpm将来会被官方的php包含吗？<br />
A：我很尊重php开发团队和他们的工作。相信他们能做得完美。但不幸的是，就我的经历看来，他们太忙了，似乎讨论php-fpm这个补丁会用相当多的时间，而我则完全没时间。</p>
<h3>简要说明：</h3>
<p>php-fpm是根据最小惊奇原则构建的。这是对于缺乏文档的唯一理由。我保证很快会建立一个wiki。如果你有问题的话，请不要犹豫在上面列出的邮件组里写邮件。</p>
<p>php-fpm已经在linux、macosx、Solaris和freebsd上测试通过。</p>
<p>确信libxml2（在某些系统上叫做libxml2-devel）已经安装。<br />
下载php和php-fpm</p>
<p>$ bzip2 -cd php-5.2.5.tar.bz2 | tar xf –<br />
$ gzip -cd php-5.2.5-fpm-0.5.7.diff.gz | patch -d php-5.2.5 -p1<br />
$ cd php-5.2.5 &amp;&amp; ./configure –enable-fastcgi –enable-fpm<br />
$ make all install<br />
编辑$prefix/etc/php-fpm.conf<br />
运行$prefix/bin/php-cgi –fpm<br />
检查$prefix/logs/php-fpm.log的细节<br />
运行phpinfo()检查你的网站是否正常<br />
master进程的pid被存放在$prefix/logs/php-fpm.pid</p>
<p>master进程可以理解以下信号：<br />
SIGINT, SIGTERM 直接终止<br />
SIGQUIT 平滑终止<br />
SIGUSR2 平滑重载所有worker进程并重新载入配置和二进制模块</p>
<p>译注：创建补丁后，会产生一个补丁文件。在./configuire后会提示你打上。configure比较费时，如果直接打上补丁再./configure可以省些时间。<br />
php-fpm还带有一个更方便的脚本，在$prefix/sbin/php-fpm。可以用php-fpm start|graceful|restart|stop来维护。稍编辑一下就可以让它使用配置文件。</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/07/p-h-p-f-p-m-f-a-s-t-c-g-i-jie-shao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginx+php 502 bad gateway解决方法</title>
		<link>http://www.hebaodans.com/2009/03/n-g-i-n-x-p-h-p-5-0-2-b-a-d-g-a-t-e-w-a-y-jie-jue-fang-fa/</link>
		<comments>http://www.hebaodans.com/2009/03/n-g-i-n-x-p-h-p-5-0-2-b-a-d-g-a-t-e-w-a-y-jie-jue-fang-fa/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 09:32:16 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[nginx]]></category>
		<category><![CDATA[502]]></category>
		<category><![CDATA[bad gateway]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://www.hebaodans.com/?p=330</guid>
		<description><![CDATA[打开 /usr/local/php/etc/php-fpm.conf       调大以下两个参数(根据服务器实际情况，过大也不行）     &#60;value name=&#8221;max_children&#8221;&#62;1280&#60;/value&#62;       &#60;value name=&#8221;max_requests&#8221;&#62;1000&#60;/value&#62; 可同时参看 nginx 502 bad故障原因及解决方法收集 ]]></description>
			<content:encoded><![CDATA[<p>打开 /usr/local/php/etc/php-fpm.conf</p>
<p>      调大以下两个参数(根据服务器实际情况，过大也不行）</p>
<p>    &lt;value name=&#8221;max_children&#8221;&gt;1280&lt;/value&gt;</p>
<p>      &lt;value name=&#8221;max_requests&#8221;&gt;1000&lt;/value&gt;</p>
<p>可同时参看 <a href="http://www.hebaodans.com/index.php/2009/05/n-g-i-n-x-5-0-2-b-a-d-gu-zhang-yuan-yin-ji-jie-jue-fang-fa-shou-ji/" target="_self">nginx 502 bad故障原因及解决方法收集 </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/n-g-i-n-x-p-h-p-5-0-2-b-a-d-g-a-t-e-w-a-y-jie-jue-fang-fa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
