Ted's Blog



访问一个PHP Web的执行流程


哎、带着沉重的心情写下这篇文章,别问为什么,问就是不知道

今天浅谈一下 当一个用户在浏览器输入 www.tebie6.com 会经历哪些流程步骤

首先先普及几个知识点

Nginx是什么?

Nginx 是一个高性能HTTP和反向代理服务器,Web Server

php-fpm是什么

首先我们要知道,cgi和fast-cgi协议

CGI 的英文全名是 Common Gateway Interface,即通用网关接口

早期的Web Server 只处理静态文件的访问,随着技术的发展出现了 PHP这类的动态脚本语言

这时候Web Server 已经处理不了了,只能交给动态语言解释器(php解释器)

为了解决 Web Server 和 不同的动态语言解释器通信,于是出现了cgi 协议

只要按照cgi协议去编写程序就能实现 Web Server 和 语言解释器的通信

cgi工作流程

有了cgi 协议  Web Server 和 语言解释器就能通信,web server就能处理动态语言了

但是web server 每收到一个请求都会fork 一个cgi进程,请求结束后在kill掉进程,访问1w次请求 就会fork、kill 1w次进程

非常影响效率,浪费资源

于是有了 cgi的改良版 fast-cgi, fast-cgi 每次处理完请求后不会kill掉进程,等待下一个请求,相当于一个进程池,这样就大大节省了资源的开销,提高了效率

而 fast-cgi 则会先 fork 一个 master 进程,解析配置文件,初始化执行环境,然后再 fork 多个 worker 进程,当 HTTP 请求过来时,master 进程将其会传递给一个 worker 进程,然后立即可以接受下一个请求

php-fpm 介绍

php-fpm  即 php-Fastcgi Process Manager.

php-fpm 是一个实现了PHP版本的FastCGI协议的程序,并提供进程管理的功能

要知道PHP的解释器是 php-fastcgi,php-fastcgi只是个实现CGI协议的程序,他只能解析请求返回结果,不能对进程进行管理

所以出现了php-fpm 来对php-fastcgi进行调度管理


进程包含 master 进程和 worker 进程两种进程。
master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。


PHP-FPM 负责管理一个进程池来处理来自 Web 服务器的 HTTP 动态请求,在 PHP-FPM 中,master 进程负责与 Web 服务器进行通信,接收 HTTP 请求,再将请求转发给 worker 进程进行处理,worker 进程主要负责动态执行 PHP 代码,处理完成后,将处理结果返回给 Web 服务器,再由 Web 服务器将结果发送给客户端。这就是 PHP-FPM 的基本工作原理,


参考图:(网上找的)


访问流程

知道了上面的知识我们来说一下主要内容


流程图:

www.tebie6.com        |        |

浏览器先尝试获取本机的hosts文件来获取ip地址,如果找不到就会像本地DNS服务器请求(一般是路由器),如果获取不到ip就去更高一层的DNS服务器获取  

        |

        |

TCP建立连接(三次握手)发送报文

        |

        |

Nginx 通过端口监听获取到请求        |        | 路由到www.tebie6.com/index.php        |        | 加载nginx的fast-cgi模块        |        | fast-cgi监听127.0.0.1:9000地址        |        | www.tebie6.com/index.php请求到达127.0.0.1:9000        |        | php-fpm 监听127.0.0.1:9000        |        | php-fpm 接收到请求,启用worker进程处理请求        |        | php-fpm 处理完请求,返回给nginx        |        | nginx将结果通过http返回给浏览


以上就是访问一个PHP Web的执行过程


知识点扩展 Nginx 和 php的通信方式有哪些?

TCP 和 Sokcet

9000端口属于TCP请求

具体内容参考:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/83032578



分享:

评论列表

笔名  :  风流小王子

2021-04-26 11:05:21

你的经历我心疼,你的文字,还爱她


笔名  :  <script>

2021-04-26 11:07:18

<script>alert(222)</script>


写评论


Contact ME

github:https://github.com/tebie6

email:liumingyuphp@163.com

友情链接

无敌我大鑫哥:http://dream128.cn