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

nginx 和 PHP-fpm 的交互

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

简介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 连接时间限制。

阅读量! (1130)

关于本站

昵称:无痕小Q

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

现居:北京

Email:1838638884@qq.com

点击排行

路难行,行路难,一身汗水,满心长。脚下百里路,头顶艳阳天。坚定如磐石,信念似火烧。好男儿,人穷志不缺,天道也酬勤。四方走,走四方,一身是胆,豪气壮。前方坎坷途,千难万般阻。心若有明灯,身似般若行。好男 路难行,行路难,一身汗水,满心长。脚下百里路,头顶艳阳天。坚定如磐石,信念似火烧。好男儿,人穷志不缺,天道也酬勤。四方走,走四方,一身是胆,豪气壮。前方坎坷途,千难万般阻。心若有明灯,身似般若行。好男
    山花烂漫, 你是昨夜晓凤.

网站公告

  • 欢迎来到我的博客

  • 1:欢迎来到我的博客


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


    3:博客会定期更新文章


    4:欢迎大家来捧场


    死生契阔,与子成说。执子之手,与子偕老。

站点信息

听闻远方有你,动身跋涉千里,我吹过你吹过的风,这算不算相拥,我喜欢你,从一而终,认真且怂。 海纳百川,有容乃大;壁立千仞,无欲则刚。
  • 建站时间:2019-8-30
  • 网站程序:php,laravel-swoole框架
  • 今日流量:612(10分钟统计一次)
  • 本月流量:9331
  • 浏览总量:388258
  • 统计方式:中间件,redis消息队列,定时任务
    甫昔少年日,早充观国宾。  读书破万卷,下笔如有神。