一个模糊的概念无论是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
