<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>FastCGI on My Blog</title><link>/tags/fastcgi/</link><description>Recent content in FastCGI on My Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 03 Sep 2017 00:00:00 +0000</lastBuildDate><atom:link href="/tags/fastcgi/index.xml" rel="self" type="application/rss+xml"/><item><title>关于CGI和FastCGI的理解</title><link>/2017/09/03/%E5%85%B3%E4%BA%8Ecgi%E5%92%8Cfastcgi%E7%9A%84%E7%90%86%E8%A7%A3/</link><pubDate>Sun, 03 Sep 2017 00:00:00 +0000</pubDate><guid>/2017/09/03/%E5%85%B3%E4%BA%8Ecgi%E5%92%8Cfastcgi%E7%9A%84%E7%90%86%E8%A7%A3/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h1 id="关于cgi和fastcgi的理解"&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html"&gt;关于CGI和FastCGI的理解&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;阅读目录&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label0"&gt;0.CGI的引入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;1.关于CGI
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label1_0"&gt;1.1.什么是CGI？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label1_1"&gt;1.2.CGI程序的工作原理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label1_2"&gt;1.3.CGI程序的特点&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label1_3"&gt;1.4.CGI程序的应用领域&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2.关于FastCGI
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label2_0"&gt;2.1.什么是FastCGI？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label2_1"&gt;2.2.FastCGI程序的工作原理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label2_2"&gt;2.3.FastCGI对进程的管理方式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label2_3"&gt;2.4.FastCGI的特点：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label2_4"&gt;2.5.FastCGI程序的应用领域&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label2_5"&gt;2.6.关于CGI和FastCGI的总结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;3.关于PHP-CGI，PHP-FPM和Spawn-FCGI
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label3_0"&gt;3.1.PHP-CGI是什么？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label3_1"&gt;3.2.关于php-fpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label3_2"&gt;3.3.关于Spawn-FCGI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label3_3"&gt;3.4.PHP-FPM与spawn-CGI对比&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;4.PHP运行的5种模式
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label4_0"&gt;4.1.cli模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label4_1"&gt;4.2.CGI模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label4_2"&gt;4.3.FastCGI模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label4_3"&gt;4.4.ISAPI运行模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label4_4"&gt;4.5.apache模块运行模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label4_5"&gt;4.6.总结一下&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_label5"&gt;5.参考文章：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;转载：&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html"&gt;关于CGI和FastCGI的理解&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;在搭建 LAMP/LNMP 服务器时，会经常遇到 PHP-FPM、FastCGI和CGI 这几个概念。如果对它们一知半解，很难搭建出高性能的服务器。&lt;/p&gt;
&lt;h2 id="0cgi的引入"&gt;0.CGI的引入&lt;/h2&gt;
&lt;p&gt;在网站的整体架构中，Web Server（如nginx，apache）只是内容的分发者，对客户端的请求进行应答。&lt;/p&gt;
&lt;p&gt;如果客户端请求的是index.html这类静态页面，那么Web Server就去文件系统中找对应的文件，找到返回给客户端（一般是浏览器），在这里Web Server分发的就是是静态数据。&lt;/p&gt;
&lt;p&gt;整个过程如下图：&lt;/p&gt;
&lt;p&gt;&lt;img alt="img" loading="lazy" src="1211667-20190114110548267-1086537722.png"&gt;&lt;/p&gt;
&lt;p&gt;对于像index.php这类的动态页面请求，Web Server根据配置文件知道这个不是静态文件，则会调用PHP 解析器进行处理然后将返回的数据转发给客户端（浏览器）。&lt;/p&gt;
&lt;p&gt;整个过程如下图：&lt;/p&gt;
&lt;p&gt;&lt;img alt="img" loading="lazy" src="1211667-20190114112158766-480550737.png"&gt;&lt;/p&gt;
&lt;p&gt;在这个过程中，Web Server并不能直接处理静态或者动态请求，对于静态请求是直接查找然后返回数据或者报错信息，对于动态数据也是交付给其他的工具（这里的PHP解析器）进行处理。&lt;/p&gt;
&lt;p&gt;那么Web Server和处理工具（这里的php-fpm）是怎样进行交互的呢？传输的是那些数据呢？这些数据的格式又是怎样的呢？&lt;/p&gt;
&lt;p&gt;由此便引出了今天的主角：&lt;strong&gt;CGI&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cnblogs.com/tssc/p/10255590.html#_labelTop"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="1关于cgi"&gt;&lt;strong&gt;1.关于CGI&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="11什么是cgi"&gt;1.1.什么是CGI？&lt;/h3&gt;
&lt;p&gt;1）CGI（Common Gateway Interface）全称是“通用网关接口”，是一种让客户端（web浏览器）与Web服务器（nginx等）程序进行通信（数据传输）的协议。&lt;/p&gt;
&lt;p&gt;用来规范web服务器传输到php解释器中的数据类型以及数据格式，包括URL、查询字符串、POST数据、HTTP header等，也就是为了保证web server传递过来的数据是标准格式的。&lt;/p&gt;
&lt;p&gt;2）CGI可以用任何一种具有标准输入、输出和环境变量的语言编写，如php、perl、tcl等。&lt;/p&gt;
&lt;p&gt;不同类型语言写的程序只要符合cgi标准，就能作为一个cgi程序与web服务器交互，早期的cgi大多都是c或c++编写的。&lt;/p&gt;
&lt;p&gt;3）一般说的CGI指的是用各种语言编写的能实现该功能的程序。&lt;/p&gt;
&lt;h3 id="12cgi程序的工作原理"&gt;1.2.CGI程序的工作原理&lt;/h3&gt;
&lt;p&gt;1）每次当web server收到index.php这种类型的动态请求后，会启动对应的CGI程序（PHP的解析器）；
2）PHP解析器会解析php.ini配置文件，初始化运行环境，然后处理请求，处理完成后将数据按照CGI规定的格式返回给web server然后退出进程；
3）最后web server再把结果返回给浏览器。&lt;/p&gt;</description></item></channel></rss>