| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> Php-fpm 与 FastCGI / CGI 的关系 -> 正文阅读 |
|
[PHP知识库]Php-fpm 与 FastCGI / CGI 的关系 |
一、CGI协议 CGI全称是“通用网关接口”(Common Gateway Interface),它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据。 CGI描述了客户端和这个程序之间传输数据的一种标准。 CGI的一个目的是要独立于任何语言的,所以CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。 如php,perl,tcl等。
客户端访问某个 URL 地址之后,通过 GET/POST/PUT 等方式提交数据,并通过 HTTP 协议向 Web 服务器发出请求。 举例请求的流程如下: 客户端访问 http://127.0.0.1:9003/cgi-bin/user?id=1 1)127.0.0.1 上监听 9003 端口的守护进程接受到该请求 二、FastCGI 协议 FastCGI是用于让Web服务器与应用程序进行通信的二进制协议(而不是人类可读的文本协议),是早期的通用网关接口(CGI)的变体。? FastCGI的主要目的是减少Web服务器和CGI程序之间的接口相关的资源开销,从而使服务器在单位时间内能够处理更多的Web请求。 FastCGI是CGI协议的改进,它可以持续执行,而不需要像CGI一样,每次都需要重新fork,正因为如此,它处理请求的效率很高。 FastCGI 与传统 CGI 模式的区别之一则是 Web 服务器不是直接执行 CGI 程序了,而是通过 Socket 与 FastCGI 响应器(FastCGI 进程管理器)进行交互,也正是由于 FastCGI 进程管理器是基于 Socket 通信的,所以也是分布式的,Web 服务器可以和 CGI 响应器服务器分开部署。 由于FastCGI是对CGI的改进,协议底层依然是与CGI兼容的。 运行原理
2)Web 服务器接收 HTTP 请求后,会与 FastCGI 进程管理器进行 Socket 通信,向FastCGI进程管理器发送二进制数据,FastCGI进程管理器一般会根据负载情况,转发这些包含CGI 环境变量和标准输入数据的消息给 相应的CGI 解释器进程。 3)CGI 解释器进程接收到消息,完成处理后将标准输出和错误信息从同一连接返回 Web服务器。 4)CGI 解释器进程接着会持续监听,等待来自 Web 服务器的下一个请求。 FastCGI协议组成 与HTTP协议不同,FastCGI协议直接使用二进制传递数据,而不像HTTP协议使用人类可读的文本。 在FastCGI中,每一个HTTP请求(或者响应)消息都分为若干个记录(Record)进行传递, 每个Record又由头部(Header)和数据(Body)组成。 Header是针对这个Record的一些元信息描述(如请求ID、Record类型、Data长度等等),Body是指这个Record中实际的有效数据,下面是1个Record的结构示意图: |———-—-Record————-|
1)多个请求的数据可以复用同一个连接进行传输,这样应用的实现就可以采用事件驱动的编程模型或者多线程编程模型以提升效率; 2)同一个请求中的多个数据流的数据可以通过封装成不同记录的形式在同一个连接上传输,例如 STDOUT 和 STDERR 两个输出流的数据可以通过同一个连接返回给 Web 服务器,而不是不得不使用2个连接。
每个字段的具体含义如下: version:表示FastCGI协议版本号,目前它的值固定为1 三、Php-fpm :基于PHP语言实现的FastCGI进程管理器 FastCGI 只是一个协议规范,需要每个语言具体去实现,PHP-FPM 就是 PHP 版本的 FastCGI 协议实现,有了它,就是实现 PHP 脚本与 Web 服务器(通常是 Nginx)之间的通信,同时它也是一个 PHP SAPI,从而构建起 PHP 解释器与 Web 服务器之间的桥梁。 PHP-FPM 负责管理一个进程池来处理来自 Web 服务器的 HTTP 动态请求,在 PHP-FPM 中,master 进程负责与 Web 服务器进行通信,接收 HTTP 请求,再将请求转发给 worker 进程进行处理,worker 进程主要负责动态执行 PHP 代码,处理完成后,将处理结果返回给 Web 服务器,再由 Web 服务器将结果发送给客户端。这就是 PHP-FPM 的基本工作原理。 参考: |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 7:51:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |