PHP知识笔记:CGI, FastCGI, PHP-CGI, PHP-FPM, Spawn-FCGI区别

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: PHP知识笔记:CGI, FastCGI, PHP-CGI, PHP-FPM, Spawn-FCGI区别

原作者链接:https://www.aicyun.com/article/34

原理

nginx只是 web 中的内容分发者,比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。即启动对应的CGI程序,PHP解析器会解析php.ini文件,初始化一个环境进程,然后处理请求,在以规定CGI规定的格式返回处理后的结果,退出进程,nginx 在把结果返回给浏览器.

CGI

CGI是公共网关接口(common gateway interface);http 服务器与你的或者其他机器上的程序进行交谈的一种工具,程序需运行在网络服务器上
CGI可以用于任何语言,只有这种语言具有标准的输入,输出和环境变量.
CGI是个协议.

FastCGI

Fastcgi是用来提高CGI程序性能的,CGI程序的性能出在CGI对每个请求都会执行解析php.ini初始化执行环境这些步骤,每次请求都启动一个进程,假如有几千万请求那就完了.
Fastcgi会先启动一个master,专门解析配置,初始化环境,在启动多个worker进程,请求来了,master会传递给一个worker,然后继续等待下一个请求,这就避免了重复的解析和初始化,效率提升不少.假如worker进程不够,master主进程会多启动几个 worker,如果空闲了,master 会主动停止一些 worker.这节省了大量的资源

PHP-CGI

PHP-CGI是PHP自带的FastCGI管理器
弊端:

  • php-cgi假如改了配置文件需要重启php-cgi,不能做到平滑重启
  • 直接杀死php-cgi进程,php 就不能运行了

PHP-FPM

PHP-FPM是一个PHP FastCGI管理器,准确的说是管理的 php-cgi,fastcgi是一种协议,和进程无关.php-fpm在修改php.ini后不像php-cgi不能平滑重启.php-fpm会让新的worker用新的配置,已经存在的 worker 处理完了就停止了.

php-cgi只是解释PHP脚本的程序而已

Spawn-FCGI

通用的FastCGI管理服务器,lighttpd的一部分.最新的lighttpd也没有包含这一块,不建议使用.

目录
相关文章
|
2月前
|
自然语言处理 安全 PHP
PHP 之道笔记整理:最佳实践与安全指南
这篇文章讨论了PHP开发中的最佳实践,包括使用最新稳定版(PHP 8.3)以提升性能和安全,利用`DateTime`类及Carbon库处理日期时间,确保使用UTF-8编码并用`mb_*`函数处理字符串,以及通过密码哈希和数据过滤来加强Web应用安全。文章提醒开发者始终保持对新技术和安全实践的关注。
44 2
|
2月前
|
PHP
PHP &&是什么,||是什么,&&和||有什么区别?
PHP &&是什么,||是什么,&&和||有什么区别?
19 1
|
3月前
|
PHP
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
50 0
|
3月前
|
应用服务中间件 Linux PHP
Linux下安装php环境并且配置Nginx支持php-fpm模块
Linux下安装php环境并且配置Nginx支持php-fpm模块
224 0
|
3月前
|
JSON JavaScript Java
【PHP】英文博客专栏PHP快速入门个人笔记
【PHP】英文博客专栏PHP快速入门个人笔记
130 1
|
3月前
|
PHP 调度
PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别
PHP CGI、FastCGI、PHP-FPM、PHP-CGI 区别
40 5
|
8月前
|
PHP
php中elseif 和else if的区别
@(黑线)以前貌似看到if这里,就直接跳了,可是今天再读文档,又发现了点东西... @(乖)可能你已经知道了php存在elseif 和else if,保留了c的风格。
44 0
|
1月前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
40 3