<?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; apache</title>
	<atom:link href="http://www.liguosong.com/category/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.liguosong.com</link>
	<description></description>
	<lastBuildDate>Tue, 08 May 2018 01:02:19 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>FastCgi与PHP-fpm之间是个什么样的关系</title>
		<link>http://www.liguosong.com/2015/11/04/fastcgi%e4%b8%8ephp-fpm%e4%b9%8b%e9%97%b4%e6%98%af%e4%b8%aa%e4%bb%80%e4%b9%88%e6%a0%b7%e7%9a%84%e5%85%b3%e7%b3%bb/</link>
		<comments>http://www.liguosong.com/2015/11/04/fastcgi%e4%b8%8ephp-fpm%e4%b9%8b%e9%97%b4%e6%98%af%e4%b8%aa%e4%bb%80%e4%b9%88%e6%a0%b7%e7%9a%84%e5%85%b3%e7%b3%bb/#comments</comments>
		<pubDate>Wed, 04 Nov 2015 10:23:02 +0000</pubDate>
		<dc:creator>lgs</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.liguosong.com/?p=540</guid>
		<description><![CDATA[首先，CGI是干嘛的？CGI是为了保证web server传递过来的数据是标准格式的，方便CGI程序的编写者。 [...]]]></description>
				<content:encoded><![CDATA[<p>首先，CGI是干嘛的？CGI是为了保证web server传递过来的数据是标准格式的，方便CGI程序的编写者。</p>
<blockquote><p>web server（比如说nginx）只是内容的分发者。比如，如果请求<code>/index.html</code>，那么web server会去文件系统中找到这个文件，发送给浏览器，这里分发的是静态数据。好了，如果现在请求的是<code>/index.php</code>，根据配置文件，nginx知道这个不是静态文件，需要去找PHP解析器来处理，那么他会把这个请求简单处理后交给PHP解析器。Nginx会传哪些数据给PHP解析器呢？url要有吧，查询字符串也得有吧，POST数据也要有，HTTP header不能少吧，好的，CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。仔细想想，你在PHP代码中使用的用户从哪里来的。</p>
<p>当web server收到<code>/index.php</code>这个请求后，会启动对应的CGI程序，这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件，初始化执行环境，然后处理请求，再以规定CGI规定的格式返回处理后的结果，退出进程。web server再把结果返回给浏览器。</p></blockquote>
<p>好了，CGI是个协议，跟进程什么的没关系。那fastcgi又是什么呢？Fastcgi是用来提高CGI程序性能的。</p>
<blockquote><p>提高性能，那么CGI程序的性能问题在哪呢？&#8221;PHP解析器会解析php.ini文件，初始化执行环境&#8221;，就是这里了。标准的CGI对每个请求都会执行这些步骤（不闲累啊！启动进程很累的说！），所以处理每个时间的时间会比较长。这明显不合理嘛！那么Fastcgi是怎么做的呢？首先，Fastcgi会先启一个master，解析配置文件，初始化执行环境，然后再启动多个worker。当请求过来时，master会传递给一个worker，然后立即可以接受下一个请求。这样就避免了重复的劳动，效率自然是高。而且当worker不够用时，master可以根据配置预先启动几个worker等着；当然空闲worker太多时，也会停掉一些，这样就提高了性能，也节约了资源。这就是fastcgi的对进程的管理。</p></blockquote>
<p>那PHP-FPM又是什么呢？是一个实现了Fastcgi的程序，被PHP官方收了。</p>
<blockquote><p>大家都知道，PHP的解释器是php-cgi。php-cgi只是个CGI程序，他自己本身只能解析请求，返回结果，不会进程管理（皇上，臣妾真的做不到啊！）所以就出现了一些能够调度php-cgi进程的程序，比如说由lighthttpd分离出来的spawn-fcgi。好了PHP-FPM也是这么个东东，在长时间的发展后，逐渐得到了大家的认可（要知道，前几年大家可是抱怨PHP-FPM稳定性太差的），也越来越流行。</p></blockquote>
<p>网上有的说，fastcgi是一个协议，php-fpm实现了这个协议</p>
<blockquote><p>对。</p></blockquote>
<p>有的说，php-fpm是fastcgi进程的管理器，用来管理fastcgi进程的</p>
<blockquote><p>对。php-fpm的管理对象是php-cgi。但不能说php-fpm是fastcgi进程的管理器，因为前面说了fastcgi是个协议，似乎没有这么个进程存在，就算存在php-fpm也管理不了他（至少目前是）。 有的说，php-fpm是php内核的一个补丁</p>
<p>以前是对的。因为最开始的时候php-fpm没有包含在PHP内核里面，要使用这个功能，需要找到与源码版本相同的php-fpm对内核打补丁，然后再编译。后来PHP内核集成了PHP-FPM之后就方便多了，使用<code>--enalbe-fpm</code>这个编译参数即可。</p></blockquote>
<p>有的说，修改了php.ini配置文件后，没办法平滑重启，所以就诞生了php-fpm</p>
<blockquote><p>是的，修改php.ini之后，php-cgi进程的确是没办法平滑重启的。php-fpm对此的处理机制是新的worker用新的配置，已经存在的worker处理完手上的活就可以歇着了，通过这种机制来平滑过度。</p></blockquote>
<p>还有的说PHP-CGI是PHP自带的FastCGI管理器，那这样的话干吗又弄个php-fpm出</p>
<blockquote><p>不对。php-cgi只是解释PHP脚本的程序而已。</p></blockquote>
<p>原文引自</p>
<h1 id="questionTitle" data-id="1010000000256516"><a href="http://segmentfault.com/q/1010000000256516">搞不清FastCgi与PHP-fpm之间是个什么样的关系</a></h1>
]]></content:encoded>
			<wfw:commentRss>http://www.liguosong.com/2015/11/04/fastcgi%e4%b8%8ephp-fpm%e4%b9%8b%e9%97%b4%e6%98%af%e4%b8%aa%e4%bb%80%e4%b9%88%e6%a0%b7%e7%9a%84%e5%85%b3%e7%b3%bb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>升级mac系统到Yosemite，太坑了。。。</title>
		<link>http://www.liguosong.com/2014/10/27/%e5%8d%87%e7%ba%a7mac%e7%b3%bb%e7%bb%9f%e5%88%b0yosemite%ef%bc%8capache%e7%ab%99%e7%82%b9%e9%85%8d%e7%bd%ae%e5%a4%b1%e6%95%88/</link>
		<comments>http://www.liguosong.com/2014/10/27/%e5%8d%87%e7%ba%a7mac%e7%b3%bb%e7%bb%9f%e5%88%b0yosemite%ef%bc%8capache%e7%ab%99%e7%82%b9%e9%85%8d%e7%bd%ae%e5%a4%b1%e6%95%88/#comments</comments>
		<pubDate>Mon, 27 Oct 2014 02:02:01 +0000</pubDate>
		<dc:creator>lgs</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://www.liguosong.com/?p=436</guid>
		<description><![CDATA[刚刚把mac系统升级了。开机之后，发现本地站点都不能访问了，以为是hosts问题，查看hosts文件，里面添加 [...]]]></description>
				<content:encoded><![CDATA[<p>刚刚把mac系统升级了。开机之后，发现本地站点都不能访问了，以为是hosts问题，查看hosts文件，里面添加的站点都存在。然后查看一下apache，重启了apache。能够访问了。却奇怪的发现，站点都返回了Its work。晕。。</p>
<p>难倒我添加的那些站点配置文件不存在了？经查看，配置文件存在。那是哪里除了问题？应该是这些站点配置，没有起作用。</p>
<p>去看apache的配置文件。还真是这个问题。我估计是mac系统升级，导致apache的配置文件重置了。随后发现，很多配置文件全部都失效了。php的配置文件也不能用了。。</p>
<p>唉，系统不能随便升级啊。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liguosong.com/2014/10/27/%e5%8d%87%e7%ba%a7mac%e7%b3%bb%e7%bb%9f%e5%88%b0yosemite%ef%bc%8capache%e7%ab%99%e7%82%b9%e9%85%8d%e7%bd%ae%e5%a4%b1%e6%95%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
