您现在的位置是:首页> 编程文章 个人博客模板

nginx 和 PHP-fpm 的交互

无痕小Q个人博客 2020-03-17 00:01:50主页 2024人已围观

简介nginx 是一个 webservice 的功能,当检测到访问 php 文件时,会把请求交给 fastcgi 模块处理。我们可以在 nginx 的配置文件中配置 fastcgi 的相关参数



nginx fastcgi 模块会把请求交给 php-fpm 程序处理。php-fpm worker 进程处理完后,会把数据返回给 nginx,nginx 会把数据放到内存缓存中,缓存区大小为 fastcgi_buffer_size,fastcgi_buffers 控制。如果返回数据大于缓存,则多出来的数据会被临时写入到文件中,放在 fastcgi_temp 目录下面。


#### PHP-FPM


php-fpm 是一种 master(主)/worker(子)多进程架构

master 的工作分为四步:

1.cgi 初始化阶段:分别调用 fcgi_init () sapi_startup () 函数,注册进程信号以及初始化 sapi_globals 全局变量。


2.php 环境初始化阶段:a). 加载和解析 php 配置;b). 加载 php 模块并记入函数符号表 (function_table)c). 加载 zend 扩展;d). 设置禁用函数和类库配置;e). 注册回收内存方法;


3.php-fpm 初始化阶段:执行 fpm_init () 函数。负责解析 php-fpm.conf 文件配置,获取进程相关参数(允许进程打开的最大文件数等), 初始化进程池及事件模型等操作。


4.php-fpm 运行阶段:执行 fpm_run () 函数,运行后主进程发生阻塞。该阶段分为两部分:fork 子进程 循环事件。fork 子进程部分交由 fpm_children_create_initial 函数处理( 注:ondemand 模式在 fpm_pctl_on_socket_accept 函数创建)。循环事件部分通过 fpm_event_loop 函数处理,其内部是一个死循环,负责事件的收集工作。


worker 进程分三步:

1. 接收客户端请求:执行 fcgi_accept_request 函数,其内部通过调用 accept 函数获取客户端请求。


2. 处理请求阶段:首先,分别调用 fpm_request_infophp_request_startup 获取请求内容及注册全局变量 ($_GET$_POST$_SERVER$_ENV$_FILES);然后根据请求信息调用 php_fopen_primary_script 访问脚本文件;最后交给 php_execute_script 执行。php_execute_script 内部调用 zend_execute_scripts 方法将脚本交给 zend 引擎处理。


3. 请求结束阶段:执行 php_request_shutdown 函数。此时 回调 register_shutdown_function 注册的函数及__destruct () 方法,发送响应内容、释放内存等操作。


常见错误码

502:请求的 PHP-CGI 已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致 PHP-CGI 进程终止,比如 php-fpm worker 进程的最大执行时间超过了,或者其他原因提前终止了。Nginx 会发现与自己通信的连接断掉了,就会返回给客户端 502 错误。


504:简单来说就是没有请求到可以执行的 PHP-CGI(php-fpm 没有开启或者 worker 数量不足),或者 nginx 的 Fastcgi 的参数 fastcgi_connect_timeout 超时,就是说 php-fpm 的执行时间超过了 nginx 的 fastcgi 连接时间限制。

阅读量! (2024)

关于本站

昵称:无痕小Q

职业:php-go-web开发工程师

现居:北京

Email:1838638884@qq.com

点击排行

细草微风岸,危樯独夜舟。  星垂平野阔,月涌大江流。  名岂文章著,官应老病休。  飘飘何所似?天地一沙鸥。 细草微风岸,危樯独夜舟。 星垂平野阔,月涌大江流。 名岂文章著,官应老病休。 飘飘何所似?天地一沙鸥。
    欲下星斗动,天乐一声肌骨寒。  金霞昕昕渐东上,轮欹影促犹频望。  绝景良时难再并,他年此日应惆怅。

网站公告

  • 欢迎来到我的博客

  • 1:欢迎来到我的博客


    2:博客免费api接口现已上线


    3:博客会定期更新文章


    4:欢迎大家来捧场


    尝同徐勉构东田,花竹成阴雨后天。为爱宪台宽白简,得随相府赏红莲。清樽屡釂吟情逸,红袖频翻舞态妍。归兴直须三鼓尽,月华况是十分圆。

站点信息

渭城朝雨浥轻尘,客舍青青柳色新。
劝君更尽一杯酒,西出阳关无故人。 海纳百川,有容乃大;壁立千仞,无欲则刚。
  • 建站时间:2019-8-30
  • 网站程序:php,laravel-swoole框架
  • 今日流量:0(10分钟统计一次)
  • 本月流量:0
  • 浏览总量:396141
  • 统计方式:中间件,redis消息队列,定时任务
    听闻远方有你,动身跋涉千里,我吹过你吹过的风,这算不算相拥,我喜欢你,从一而终,认真且怂。