• nginx 如何解析php文件php-fpm的解释


    nginx 如何解析php文件php-fpm的解释

    • 首先从nginx说起,nginx的配置文件,/usr/local/nginx/conf/nginx.conf
    location ~ .php {
                root           /nginx;
                fastcgi_pass   127.0.0.1:9000;  //ip+port方式
               ;  fastcgi_pass unix:/tmp/php-cgi.sock;【unxi domain socket形式】  这种是进程之间的访问,比tcp/ip的要快
                fastcgi_index  index.php;
              fastcgi_split_path_info ^(.+.php)(.*)$;     
             fastcgi_param PATH_INFO $fastcgi_path_info;    
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
               include /usr/local/etc/nginx/fastcgi.conf;
            
            }
    
    从上面可以看出来 ,nginx通过fastcgi_pass命令将请求转发给fastcgi 即php-fpm;
    
    当web server收到/index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,(php-fpm 如何解析php.ini 文件的? 新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。 只需要在安装的时候/configure --prefix=/usr/local/php  --enable-fpm 开启支持php-fpm就可以了)初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。
    

    知识填充

    • CGI是为了保证web server传递过来的数据是标准格式的,标准的CGI对每个请求都会解析php.ini文件,初始化执行环境,所以处理每个时间的时间会比较长。

    • Fastcgi是用来提高CGI程序性能的,是CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。是优化版的cgi;fastcgi 是一个与平台无关,与语言无关,任何语言只要按照它的接口来实现,就能实现自己语言的fastcgi能力和web server 通讯。

    • 首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。当HTTP服务器遇到动态请求时,会将请求转发给FastCGI进程,FastCGI进程执行动态脚本后再将结果返回给HTTP服务器,

    --------------------以上,fastcig ,cgi都是独立于语言的;

    • php-cgi 就是php的解释器 php-cgi只是个CGI程序,php-cgi是php提供给web serve也就是http前端服务器的cgi协议接口程序,,他自己本身只能解析请求,返回结果,不会进程管理.所以就出现了一些能够调度php-cgi进程的程序,比如说由lighthttpd分离出来的spawn-fcgi。好了PHP-FPM也是这么个东东,

    • php-fpm是一个实现了FastCGI(协议)的程序,php-fpm是php提供给web serve也就是http前端服务器的fastcgi协议接口程序,管理对象是php-cgi,PHP内核集成了PHP-FPM之后就方便多了,使用--enalbe-fpm这个编译参数即可。

    • 整个过程 nginx接收php文件的请求后,通过fastcgi_pass命令将请求发送给php-fpm---php-cgi的进程管理器(在这中间,必须通过fastCGI进程管理器,是优化后的cgi,通过master主进程和work子进程,其实就是将请求的格式规范化),就是php-cgi的进程管理者,最后还是有php-cgi去完成解析

    了解apache如何调用php 请移步https://blog.csdn.net/u011280342/article/details/78121132

  • 相关阅读:
    第一次玩github,第一个开源小项目——xxoo
    从Cortex-M3的MSP 和PSP谈Linux能否在中断中使用Sleep
    MSP与PSP
    Keil综合(03)_map文件全解析[转]
    Android 格式化分区命令
    强化学习(二)马尔科夫决策过程(MDP)
    强化学习(一)模型基础[转]
    在博客中使用MathJax写数学公式
    循环神经网络(RNN)模型与前向反向传播算法
    Git missing Change-Id in commit message footer解决方法
  • 原文地址:https://www.cnblogs.com/mxyindex/p/11051727.html
Copyright © 2020-2023  润新知