page contents

Nginx+PHP-FPM运行原理

以下内容希望帮助到大家!

attachments-2020-06-VP3qmJMT5ee049cc4c61e.png

CGI

common gateway interface (公共网关接口)

请求模式:
    Web Brower(浏览器) ----(通过http协议传输)----> Http Server(服务器nginx/apache) -----> CGI Program -----> Db

Server 与 CGI 通过 STDIN/STDOUT(标准的输入/输出)进行数据传递
nginx(动态加载模块) apache(指定加载模块)

CGI工作原理

每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的CGI解释器进程(如php-cgi.exe),
CGI 的一个进程则处理完一个请求后退出,下一个请求来时再创建新进程。
当然,这样在访问量很少没有并发的情况也行。可是当访问量增大,并发存在,这种方式就不 适合了。于是就有了fastcgi。

FastCGI

像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,
不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。

一般情况下,FastCGI的整个工作流程是这样的:
    1.Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
    2.FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
    3.当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。 Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
    4.FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。
      当FastCGI子进程关闭连接时, 请求便告处理完成。
      FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 
      在CGI模式中,php-cgi在此便退出了。

php-fpm(PHP内置的一种fast-cgi)

php-fpm即php-Fastcgi Process Manager.
php-fpm是 FastCGI 的实现,并提供了进程管理的功能。
进程包含 master 进程和 worker 进程两种进程。
master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),
每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。

请求步骤

Web Brower(浏览器访问) www.example.com
|
        |
   通过http协议传输  
|
        |
    http server
 (服务器nginx/apache)            
|
        |
     配置解析    
路由到 www.example.com/index.php
|
        |
加载 nginx 的 fast-cgi 模块
|
        |
fast-cgi 监听 127.0.0.1:9000 地址
通过 fast-cgi 协议将请求转发给 php-fpm 处理
|
        |
请求到达 127.0.0.1:9000
|
        |
php-fpm 监听 127.0.0.1:9000
可通过 php-fpm.conf 进行修改


attachments-2020-06-IZobrFO75ee049b71276b.jpg

  • 发表于 2020-06-10 10:47
  • 阅读 ( 504 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章