Mickey's Blog · · nginx,php,LNMP

nginx到php中间的流程都有什么

在开始讲nginx和php的连接之前,我们先来简单介绍一个这款服务器,Nginx是一款功能强大的http服务器和反向代理服务器,http服务器大家应该是很熟悉的比如我们常用的apache就是一种,反向代理功能我会新开一个题目单独介绍。同时nginx也是一个很轻量级的服务器,也可以作为邮件服务器,其实一开始出现nginx就是用来当做邮件服务器的。

在和Apache的对比上,nginx对静态资源的加载有更好的效果,以及在并发的处理,负载均衡上逼apache要优秀一些,所以我们会看到nginx服务器今年的使用量有所上升,但暂时还未能击败apache,毕竟Apache在对动态语言的支持上更加的友好,同时稳定性也比nginx要好一些,但13年四月之后的1.4.0稳定版之后稳定性能也是很可信赖的,同时nginx支持动态修改配置文件,而且不想apache那样拥有众多复杂的配置,nginx配置简单并且支持几乎所有的Linux OS

那说了这么多选用nginx的理由,我们php开发人员如何使用nginx来作为我们的服务器呢,我们知道,当我们使用Apache的时候我们需要配置apache让他去处理.php后缀的文件,将文件交给php引擎解析成静态的,那nginx的原理呢和apache是一样的,但是有一点我们之前说了,Apache对动态语言的支持比较好,所以我们配置的时候其实没有费太多的功夫,但nginx不一样,他的主要优势体现在静态资源上,那么我们需要多做哪些工作呢。

首先我们要知道当我们使用http服务的时候我们给用户提供的功能叫做CGI(通用网关接口)而CGI最为人诟病的就是每次执行都要启动fork一次,而这会显著降低我们 CGI的执行速度,那么我们要介绍的这个Fast-CGI是nginx用来管理CGI的http服务,在Fast-CGI下,所有的请求在请求到CGI的时候不会重新fork而是由Fast-CGI分配一个进程(或子进程)去处理,Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module),然后FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个-cgi)并等待来自Web Server的连接。当请求到来时,Fast-CGI分配一个子进程去处理,并将请求信息交给这个子进程,在php语言中实现这个功能区调用Fast-CGI的就是php-fpm

到这里我们总结一下,从请求来到到请求结束都经历了那些,在nginx环境下

请求开始-nginx接受请求 ,请求phpfpm phpfpm分配一个进程给请求,这个进程开始接受请求内容,并解释执行php代码,最后将内容返回给请求。

关于nginx我们还会有更详细的介绍,以及他对并发负载均衡等的深度解析