zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    用wamp配置的环境,想用CMD连接mysql怎么连
    Mysql删除表
    MySQL创建表
    Leetcode 130. Surrounded Regions
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 110. Balanced Binary Tree
    Leetcode 98. Validate Binary Search Tree
    Leetcode 99. Recover Binary Search Tree
    Leetcode 108. Convert Sorted Array to Binary Search Tree
    Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
  • 原文地址:https://www.cnblogs.com/mxyindex/p/11051727.html
Copyright © 2011-2022 走看看