Home  >  Article  >  Backend Development  >  Nginx, CGI, FastCGI, PHP-CGI, PHP-FPM processing flow

Nginx, CGI, FastCGI, PHP-CGI, PHP-FPM processing flow

WBOY
WBOYOriginal
2016-07-29 08:58:04984browse

There are many explanations of cgi fastcgi php-fpm php-cgi on the Internet. You can check it on Baidu. The following is my own understanding

Noun terms:

<code>1、web服务器
2、通信协议
3、进程、主进程、子进程
4、php解析器

CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准、
接口、协议【协议】

FastCGI:CGI协议的升级版【协议】

PHP-CGI: 实现了CGI接口协议的PHP脚本解析器【程序】

PHP-FPM: 管理和调度php-cgi进程,进而实现了FastCGI接口协议的程序【程序】
</code>
<code>webserver只能处理静态文件,对于php这样的动态脚本无能为力,只能交给php自己来处理,
于是有了下面这个流程:

</code>

Nginx, CGI, FastCGI, PHP-CGI, PHP-FPM processing flow

<code>但是上面架构有个性能问题,CGI对每个请求会parse一遍对应脚本的配置文件(如php.ini),
加载配置和扩展,初始化执行环境,性能非常差,所有有了下面的流程:
</code>

Nginx, CGI, FastCGI, PHP-CGI, PHP-FPM processing flow

So the program to implement the Fastcgi protocol, For example, how does PHP-FPM do it? First, Fastcgi will start a master process, parse the configuration file, initialize the execution environment, and then start multiple worker processes. This worker is php-cgi. When a request comes in, the master passes it to a worker, which can then immediately accept the next request. This avoids duplication of work and is naturally highly efficient. And when there are not enough workers, the master can pre-start several workers to wait according to the configuration, such as 20 workers. Of course, when there are too many idle workers, some will be stopped, which improves performance and saves resources. This is fastcgi's process management.

The following is the configuration item for the number of workers in the php-fpm configuration file:

<code>; The maximum number of processes FPM will fork. This has been design to control
; the global number of processes when using dynamic PM within a lot of pools.
; Use it with caution.
; Note: A value of 0 indicates no limit
; Default Value: 0
; process.max = 128</code>

Then the maximum number of worker processes is 128

For more explanations of FastCGI

<code>    fastcgi是基于cgi架构的扩展,他的核心思想就是在web server和具体cgi程序之间建立一个智能的可持续的中间层,统管cgi程序的运行,这样web server只需要将请求提交给这个层,这个层再派生出几个可复用的cgi程序实例,然后再把请求分发给这些实例,这些实例是可控的,可持续,可复用的,因此一方面避免了进程反复fork,另一方面又可以通过中间层的控制和探测机制来监视这些实例的运行情况,根据不同的状况fork或者回收实例,达到灵活性和稳定性兼得的目的。</code>

Reference documentation

https ://segmentfault.com/q/1010000000256516

http://blog.csdn.net/zhuanshenweiliu/article/details/46413241

The above introduces the processing flow of Nginx, CGI, FastCGI, PHP-CGI, and PHP-FPM, including the relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn