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

通过nginx中FastCgi进程管理器的学习,了解php动态网站网页的生成过程,以及nginx解析php程序的步骤

时间:2023-03-30 05:29:10 PHP

学习factcgi和cgi1.什么是FastCGI?首先,让我们看一下CGI。CGI的全称是CommonCatewayInterface。它是一种在HTTP服务上进行程序服务通信的工具,它允许客户端从Web浏览器向Web服务器上执行的程序发出请求。数据。CGI描述了在服务器和请求处理程序之间传输数据的标准。CGI程序必须在Web服务器上运行。常见的是php-cgi.exe。它是一个支持CGI标准的php的可执行文件。CGI的工作原理:每当客户端请求CGI时,WEB服务器请求操作系统生成一个新的解释器进程(如php-cgi.exe)。当CGI进程完成当前任务时,Web服务器将杀死它。这个流程。但是CGI接口的性能较差,因为每次HTTP服务器遇到动态程序,都需要重启解析器进行解析。以PHP为例,每一次web请求,PHP都要重新解析php.ini,重新加载所有的dll扩展,并重新初始化所有的数据结构,其速度之慢可想而知。这在处理高并发问题时几乎是不可能的。因此,FastCGI诞生了。因此,CGI解释器的重复加载是导致CGI性能低下的主要原因。如果CGI解释器保存在内存中并被FastCGI进程管理器接受,它可以提供良好的性能、可伸缩性和Fail-Over特性等等。FastCGI:是一种可扩展的、高速的网络服务器和脚本语言之间的通信接口。它的主要行为是将CGI解释器进程保存在内存中,从而获得高性能。2、FastCGI在web服务器(Nginx)中的工作原理。(1)在web服务器启动时加载FastCGI进程管理器,比如php的FastCGI进程管理器就是PHP-FPM(php-FastCGIProcessManger)。(2)FastCGI进程管理器初始化自身并启动多个CGI解释服务器进程(任务管理器中可见多个php-cgi.exe)并等待来自Web服务器的连接。在启动php-cgiFastCGI进程时,可以配置为使用TCP协议或socker启动。(3)当客户端请求到达WebServer时,WebServer使用TCP协议或socket方式将请求转发给FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器(子进程php-cgi.cgi)。EXE文件)。Web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。(4)、FastCGI子进程php-cgi.exe处理服务器后从原来的连接路径向web返回标准输出和错误信息。当FastCGI子进程关闭连接时,请求被处理。但是如果是在传统的CGI界面,php-cgi子进程就会在这里退出。下图是Nginx+FastCGI的运行过程,脚本语言是php。3、FastCGI的优点(1)、php脚本运行速度更快,php解释器每次需要的时候都是加载到内存中而不是从内存中读取,大大提高了依赖脚本运行的站点的性能.(2)需要使用的系统资源较少。由于服务器不需要每次都加载PHP解释器,所以可以在不增加CPU负担的情况下大大提高站点的传输速度。(3)、动态语言可以与HTTP服务器分离,脚本分析服务器上可以同时启动一个或多个脚本分析守护进程。大多数流行的HTTP服务器都支持FastCGI,包括Apache/Nginx/lighttpd等。(4)当HTTP服务器每次遇到动态程序时,可以直接传递给FastCGI进程执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器独占处理静态请求或者将动态脚本服务器的结果返回给客户端,大大提高了整个应用系统的性能。用户访问php动态网页的过程,以及nginx解析php的步骤用户浏览器发起访问网页:http://192.168.1.103/index.php用户与nginx服务器进行三次握手一个TCP连接(包括nginxaccesscontrolPolicy,nginxfirewall等访问控制策略)第一步:nginx收到服务器的http请求。第二步:nginx会根据用户访问的URL和后缀判断请求。(1)、如客户端访问的index.php,nginx会根据配置文件中的位置进行匹配。例如:server{listen8054;位置~\.php${fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;包括fastcgi_params;到静态页面/50x.html#error_page500502503504/50x.html;location=/50x.html{根html;}}如果用户访问index.php,会匹配location~.php$,这个的意思是对用户通过url访问的资源进行大小敏感的匹配,访问的资源以.php结尾。这里的fastcgi_pass127.0.0.1:9000表示nginx将http请求通过fastcgi接口发送到127.0.0.1:9000进行处理。这个过程就是上面fastcgi运行原理的第三部分。这里的php脚本解析服务和nginx是放在同一台服务器上的。这里我使用php来返回动态资源,所以这里的FastCGI进程管理器使用的是php-fpm。(2)、fastcgi_pass将动态资源传递给php-fpm后,php-fpm会将资源传递给php脚本解析服务器的wrapper。(3)、wrapper收到php-fpm传来的请求后,wrapper会生成一个新线程调用php动态程序处理脚本,读取返回数据;比如读mysql数据库会触发库读操作。(4)、php将查询处理的结果返回给wrapper,返回给nginx。最后,Nginx将返回的数据发送给客户端。参考链接:https://blog.csdn.net/m136663...https://blog.csdn.net/riuhaze...https://www.cnblogs.com/lidab...