美文网首页
Client/Nginx/PHP-FPM通信-note

Client/Nginx/PHP-FPM通信-note

作者: robertzhai | 来源:发表于2023-05-23 17:23 被阅读0次
    image.png
    • Client通过HTTP方式请求Nginx,请求由Nginx的worker进行处理,转成对应的FastCGI,请求FPM, accept由FPM的worker进程处理,执行完毕再返回给Nginx, Nginx再进一步返回给Client。

    • 我们以Nginx+PHP-FPM方式为例,讲一下整个Web请求的过程。一般情况下,Nginx会根据服务器的CPU内核数设置worker的进程数,而PHP-FPM的进程有三种设置方式:static、dynamic和ondemand,可以在php-fpm.conf里面设置

    • php-fpm启动时,首先启动一个calling process,然后由calling process创建master进程,master进程根据需要创建的子进程数创建work进程,其中master进程的title为php-fpm: master process,而worker进程的名称为php-fpm: pool name,其中name在php-fpm.conf里面设置

    image.png
    • woker创建完成后,对请求的处理工作都会由worker进程来进行,而master进程负责对worker进程的监控和管理,比如php-fpm reload和php-fpm stop分别用来重新加载和停止FPM。这部分工作是通过信号机制进行的,比如我们执行reload命令时,对主进程发送了SIGUSR2信号。下面我们对PHP-FPM中的master进程和worker进程的信号分别进行阐述。

    CGI模式

    • CGI即通用网关接口(Common Gateway Interface),通俗地讲,CGI就是将Web服务器和PHP执行程序连接起来,把接收的指令传递给PHP执行程序,再把服务器执行程序的结果返还给Web服务器。


      image.png
    • 对于每一个用户请求,都会先创建CGI的子进程,然后处理请求,处理完后结束这个子进程,这就是fork-and-execute模式。用户请求数量非常多会大量挤占系统的资源(如内存、CPU时间等),造成效率低下。所以,对于采用CGI模式的服务器,有多少连接请求,就会有多少CGI子进程,子进程反复加载也是导致CGI性能低下的主要原因,这也是FastCGI出现的原因。

    FastCGI

    • 全称 快速通用网关接口(FastCommonGatewayInterface)。

    • FastCGI 实际上是增加了一些扩展功能的 CGI 、是 CGI 的改进,描述了客户端和Web服务器程序之间传输数据的一种标准。

    • FastCGI像是一个常驻(long-live)型的CGI,FastCGI 致力于减少Web服务器与CGI程序之间进行互动的开销,从而使Web服务器可以同时处理更多的Web请求。

    • 与 CGI 为每个Web请求创建一个新的进程不同, FastCGI 使用持续的进程来处理一连串的Web请求,这些进程由FastCGI进程管理器管理,而不是Web服务器。

    • 它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

    ref

    相关文章

      网友评论

          本文标题:Client/Nginx/PHP-FPM通信-note

          本文链接:https://www.haomeiwen.com/subject/xuvxedtx.html