当前位置: 首页 > 后端技术 > PHP

一个长期存在的问题cgi、fastcgi、PHP-fpm总结

时间:2023-03-30 01:46:59 PHP

一个模糊的概念无论是php、python编程语言,还是apache,对于cgi协议来说,nginx服务器都是绕不开的话题。经常会看到安装部署,那么它们是做什么的呢,网上有很多答案!今天通过他们一波总结,就可以告别这个难关了。参考:https://chinapenpal.com/2021/...HTTP转cgi协议。浏览器的客户端进入网站后,通过http协议去到web服务器,比如apache。每个人都知道这一点。如果web服务器没有处理php文件的功能,就会请求php解释器(php-cgi.exe)。或者,Web服务器也将请求python解释器,而不是PHP文件,例如python文件。既然口译员那么多,就必须有一个协议来规定他们的标准,否则就乱套了。这时候cgi协议就出来了。说白了就是apache/nginx与后端脚本语言(php、python等)交互建立的协议。什么是php-cgi?在windows系统上,安装php后,安装目录下有如下三个文件:php.exe:命令行执行php脚本文件。php-cgi.exe:通过CGI或FastCGI在web服务器(apache)上运行PHP时可以使用的CGI可执行文件,可以理解为php解释器(有人说是官方的FastCGI进程管理器,至于文章背后是什么再分析,这里作为php解释器使用)。php-win.exe:用于在不使用命令行窗口的情况下执行PHP脚本的PHP可执行文件(例如,使用WindowsGUI的PHP应用程序)。以上三个文件互不影响。我在本地测试删除了两个,另一个也可以用。在命令行运行一个php文件F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>phpF:\softwares\phpStudy\PHPTutorial\index.phpHelloWorld#php.exe运行结果F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-cgiF:\softwares\phpStudy\PHPTutorial\index.phpX-Powered-By:PHP/7.2.1#php-cgi.exe运行结果Content-type:text/html;charset=UTF-8#php-cgi.exe运行结果HelloWorld#php-cgi.exe运行结果F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-winF:\softwares\phpStudy\PHPTutorial\index.php#php-win.exe运行,结果是空行F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>apache如何支持php有3种方式apache调用php、module、cgi、FastCgi,这些方法网上都可以找到,下面解释一下原理。Module:这是apache独有的对php的支持。nginx没有这个方法。这样apache就可以直接处理php脚本了。至于多进程多线程,就看apache的工作方式了。参与:Apache的三种工作模式介绍及配置cgi(CommonGatewayInterface):当Apache有php脚本需要处理时,通过cgi协议调用php解释器php-cgi.exe,php-cgi.exe会读取php.ini配置文件,作为apache的子进程。这里有一个缺点:如果客户端浏览器的请求过多,apache会创建很多子进程,每次都会重新读取php.ini配置文件。FastCgi是为解决cgi问题而制定的协议。协议规定php-cgi.exe不再是你apache的子进程,我独立了,你放心!我单独构成一个服务。该服务指定一个主进程,然后启用多个工作进程。master负责配置php.ini等文件,并接收apache的请求,分配给worker进程处理。这样,apache作为客户端,FastCgi协议程序作为服务端。这个FastCgi协议程序是PHP-fpm,是FastCgi协议的具体实现。什么是cgi和FastCgi?它们都是协议,FastCgi解决了cgi的一些不足。什么是php-cgi.exe和PHP-fpm?php-cgi.exe是一个解释器,也可以用作简单的cgi/FastCgi管理器。比如nginx如何与windows系统中的php结合?linux使用php-fpm,windows没有php-fpm。这时候打开任务管理器,会发现CGI/FastCGI(32位)进程,nginx是反向代理。给它那个。位置~\.php(.*)${fastcgi_pass127.0.0.1:9000;#这里的9000端口就是``php-cgi.exe``监听的fastcgi_indexindex.php;fastcgi_split_path_info^((?U).+\.php)(/?.+)$;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;fastcgi_paramPATH_INFO$fastcgi_path_info;fastcgi_paramPATH_TRANSLATED$document_root$fastcgi_path_info;包括fastcgi_params;一些简单的配置是可能的。F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-cgi-h用法:php[-q][-h][-s][-v][-i][-f]php[args...]-a交互运行-b|外部FASTCGI服务器模式的绑定路径-C不要chdir到脚本的目录-c|在此目录中查找php.ini文件-n不使用php.ini文件-dfoo[=bar]定义INI条目foo值为'bar'-e为调试器/分析器生成扩展信息-f<文件>解析<文件>。暗示`-q'-h这帮助-iPHP信息-l仅语法检查(lint)-m显示在模块中编译-q安静模式。抑制HTTP标头输出。-s显示颜色语法突出显示源。-v版本号-w显示源带有剥离的注释和空格。-z<文件>加载Zend扩展<文件>。-T测量脚本重复次的执行时间。什么是php-fpm?PHP-fpm就是FastCgi进程管理器,它的概念一点都不模糊!它启动服务监听端口,通过nginx反向代理给它,自带php解释器,但是windows上不能用php-fpm。对于客户端浏览器,nginx/apache是服务器。对于PHP-fpm,apache/nginx是客户端。总结一下,cgi和fastcgi是web服务器和后台脚本语言之间的协议、标准、协议。php-cgi和PHP-fpm是程序。至于php-cgi到底是解释器还是管理器,网上有一些说法,也可以监听端口来处理web服务器代理的请求,那么就是一个简单的cgi/FastCgi进程管理器现在的经理!参考想不通FastCgi和PHP-fpm是什么关系PHP连接方式介绍以及如何攻击PHP-FPMphp-cgi和php-fpm是什么关系?Apache的三种工作模式介绍及配置PHP手册:在老Windows系统上安装php-cgi和php-fpm有什么关系

最新推荐
猜你喜欢