决眦入归鸟 發表於 2019-6-19 15:42:00

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

<h3 id="nginx-如何解析php文件php-fpm的解释">nginx 如何解析php文件php-fpm的解释</h3>
<ul>
<li>首先从nginx说起,nginx的配置文件,/usr/local/nginx/conf/nginx.conf</li>
</ul>
<pre><code class="language-bash">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_indexindex.php;
          fastcgi_split_path_info ^(.+\.php)(.*)$;   
       fastcgi_param PATH_INFO $fastcgi_path_info;   
            fastcgi_paramSCRIPT_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再把结果返回给浏览器。
</code></pre>
<h3 id="知识填充">知识填充</h3>
<ul>
<li>
<p>CGI是为了保证web server传递过来的数据是标准格式的,标准的CGI对每个请求都会解析php.ini文件,初始化执行环境,所以处理每个时间的时间会比较长。</p>
</li>
<li>
<p>Fastcgi是用来提高CGI程序性能的,是CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。是优化版的cgi;fastcgi 是一个与平台无关,与语言无关,任何语言只要按照它的接口来实现,就能实现自己语言的fastcgi能力和web server 通讯。</p>
</li>
<li>
<p>首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。当HTTP服务器遇到动态请求时,会将请求转发给FastCGI进程,FastCGI进程执行动态脚本后再将结果返回给HTTP服务器,</p>
</li>
</ul>
<p>--------------------以上,fastcig ,cgi都是独立于语言的;</p>
<ul>
<li>
<p>php-cgi 就是php的解释器 php-cgi只是个CGI程序,php-cgi是php提供给web serve也就是http前端服务器的cgi协议接口程序,,他自己本身只能解析请求,返回结果,不会进程管理.所以就出现了一些能够调度php-cgi进程的程序,比如说由lighthttpd分离出来的spawn-fcgi。好了PHP-FPM也是这么个东东,</p>
</li>
<li>
<p>php-fpm是一个实现了FastCGI(协议)的程序,php-fpm是php提供给web serve也就是http前端服务器的fastcgi协议接口程序,管理对象是php-cgi,PHP内核集成了PHP-FPM之后就方便多了,使用--enalbe-fpm这个编译参数即可。<br>
<img src="https://img2018.cnblogs.com/blog/1522886/201906/1522886-20190619154201883-265416921.png" alt="" loading="lazy"></p>
</li>
<li>
<p>整个过程 nginx接收php文件的请求后,通过fastcgi_pass命令将请求发送给php-fpm---php-cgi的进程管理器(在这中间,必须通过fastCGI进程管理器,是优化后的cgi,通过master主进程和work子进程,其实就是将请求的格式规范化),就是php-cgi的进程管理者,最后还是有php-cgi去完成解析</p>
</li>
</ul>
<p>了解apache如何调用php 请移步https://blog.csdn.net/u011280342/article/details/78121132</p><br><br>
来源:https://www.cnblogs.com/mxyindex/p/11051727.html
頁: [1]
查看完整版本: nginx 如何解析php文件php-fpm的解释