首页 > 技术文章 > LNMP分离部署

jojoword 2019-07-22 21:15 原文

作者:逃离地球的小小呆
来源:CSDN
原文:https://blog.csdn.net/gui951753/article/details/80204325
版权声明:本文为博主原创文章,转载请附上博文链接!

LNMP之间的数据流转:

第一步:浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)返回浏览器。

第二步:将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。

第三步:PHP脚本通过PHP和数据库的连接,完成对数据库进行增删改查的功能,并从数据库中获取数据。

第四步:将获取到的数据返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx。

第五步:服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

Nginx+FastCGi工作流程

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过Fast-CGI接口来调用。Fast-CGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。

wrapper:为了调用CGI程序,还需要一个Fast-CGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过Fast-CGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过Fast-CGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+Fast-CGI的整个运作过程。

Nginx架构

如上图所示:

1、Nginx启动后,会产生一个主进程(master),主进程执行一系列的工作后会产生一个或者多个工作进程;

2、在客户端请求动态站点的过程中,Nginx服务器还涉及和后端服务器的通信。Nginx将接收到的Web请求通过代理转发到后端服务器,由后端服务器进行数据处理和组织;

3、Nginx为了提高对请求的响应效率,降低网络压力,采用了缓存机制,将历史应答数据缓存到本地。保障对缓存文件的快速访问;

Nginx和Apache异同

上图是截止到20180426官方发布的WebServer的市场占有率。一个明显的趋势就是Apache的市场占有率逐年下降,Nginx逐年上涨,说明,Nginx在某些方面是要远远强于Apache的。Nginx和Apache主要的区别有以下几点。

核心区别在于Apache是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程。在大部分场景中,Nginx的epoll模型性能要高于Apache的select模型。
Nginx 处理请求是异步非阻塞的,而Apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 。
同样提供web 服务,Nginx比Apache 占用更少的内存及资源。
Nginx除了能够提供Web服务以外,还能提供反向代理功能,在一定程度上实现负载均衡。
LNMP部署

推荐阅读