栋淮 發表於 2020-8-19 20:35:00

nginx如何解析php?

<p><img src="https://img2020.cnblogs.com/blog/1827562/202008/1827562-20200819191602399-1290745745.png" alt="" loading="lazy"></p>
<blockquote>
<p>nginx本身不支持对外部程序的直接调用或者解析,所有的外部程序包括php必须通过FastCGI接口来调用(FastCGI接口在Linux下是socket)<br>
为了调用CGI程序,还需要FastCGI的wrapper,当nginx将cgi请求发送给这个socket的时候,通过fastcgi接口,wrapper接收到请求,然后派生出一个线程,这个线程调用外部程序处理并返回数据;<br>
接着,wrapper再将返回的数据通过fastcgi接口,socket传递给nginx;<br>
最后,nginx将返回的数据发送给客户端</p>
</blockquote>
<h4 id="一nginx解析php">一、Nginx解析PHP</h4>
<p><img src="https://img2020.cnblogs.com/blog/1827562/202008/1827562-20200819203231677-618305311.png" alt="" loading="lazy"></p>
<p>PHP-FRM是管理FastCGI的一个管理器</p>
<p>1.php-frm自身初始化,启动进程php-frm,监听9000端口;FastCGI子进程等待来自web服务器的连接<br>
<img src="https://img2020.cnblogs.com/blog/1827562/202008/1827562-20200819192755867-716614299.png" alt="" loading="lazy"><br>
2.当客户端request到达nginx时,nginx通过location指令,将所有以.php结尾的文件都交给127.0.0.1:9000(本地php解析服务器)进行处理</p>
<pre><code class="language-powershell">      location ~ \.php$ {
            root         html;
            fastcgi_pass   127.0.0.1:9000;#表示nginx通过fastcgi_pass将用户请求的资源发给9000端口进行解析
            fastcgi_indexindex.php;
            fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#脚本文件请求的路径
            include      fastcgi.conf;#表示nginx会调用fastcgi.conf这个配置文件
      }
</code></pre>
<p>ngx_http_fastcgi_module</p>
<p>3.nginx将请求fastcgi客户端,通过fastcgi_pass将用户的请求发送给php-fpm<br>
<img src="https://img2020.cnblogs.com/blog/1827562/202008/1827562-20200819194404882-1236510938.png" alt="" loading="lazy"></p>
<p>4.wrapper收到php-fpm的请求后,会生成一个新的线程调用php动态程序解析服务器(如果请求是mysql数据的读取,将会触发读库操作,如果是图片、文件等,将会触发查询后端存储服务器)</p>
<p>5.php将查询到的结果通过fastcgi返回给nginx</p>
<p>6.nginx将数据返回给用户</p>
<h4 id="二如何配置nginx支持php">二、如何配置nginx支持php</h4>
<p>1.在编译安装时添加--enable-fpm 参数即可开启php-fpm</p>
<pre><code class="language-powershell">./configure --prefix=/usr/local/php/…… --enable-fpm
</code></pre>
<p>2.生成php-fpm的配置文件,并修改参数</p>
<pre><code class="language-powershell">#cd /usr/local/php/etc/
cp -a php-fpm.conf.default php-fpm.conf
#vim php-fpm.conf
pid = run/php-fpm.pid
#取消注释
user = nginx
group = nginx
pm.start_servers = 2
#启动时开启的进程数(默认值)
pm.min_spare_servers = 1
#最少空闲进程数(默认值)
pm.max_spare_servers = 3
#最多空闲进程数(默认值)
</code></pre>
<p>2.修改nginx的配置文件,使其识别.php后缀的</p>
<pre><code class="language-powershell">#vim /usr/local/nginx/conf/nginx.conf
#取消以下几行的注释,并修改include选项的后缀位fastcgi.conf
#65行-71行
      location ~ \.php$ {
            root         html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_indexindex.php;
            fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;
            include      fastcgi.conf;
      }
</code></pre>


</div>
<div id="MySignature" role="contentinfo">
    <div id="AllanboltSignature">   
      <div>作者:ccku</div>
      <div>出处:http://www.cnblogs.com/ccku/</div>
      <div>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。</div>
    </div><br><br>
来源:https://www.cnblogs.com/ccku/p/13531551.html
頁: [1]
查看完整版本: nginx如何解析php?