Nginx工作原理

  
      <李> Nginx工作原理
    Nginx由内核和模块组成。
    Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个位置,而此位置中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。   
  

通常一个位置中的指令会涉及一个处理器模块和多个过滤模块(当然,多个位置可以复用同一个模块).handler模块负责处理请求,完成响应内容的生成,而过滤模块对响应内容进行处理。用户根据自己的需要所开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。
Nginx的模块从结构上分为核心模块,基础模块和第三方模块:
?
核心模块:HTTP模块,事件模块和邮件模块;?
基础模块:HTTP访问模块,HTTP FastCGI模块,HTTP代理模块和HTTP重写模块;
第三方模块:HTTP上游请求哈希模块,注意模块和HTTP访问关键模块。
?
Nginx的模块从功能上分为如下三类:?
处理程序(处理器模块):此类模块直接处理请求,并进行输出内容和修改头信息等操作.Handlers处理器模块一般只能有一个;?过滤器(过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出;代理(代理类模块):此类模块是Nginx的HTTP上游之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。

     <李> Nginx的进程模型在工作方式上,Nginx分为单工作进程和多工作进程两种模式。
在单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的;?
在多工作进程模式下,每个工作进程包含多个线程.Nginx默认为单工作进程模式。      

Nginx在启动后,会有一个主进程和多个工人进程。
主进程主要用来管理工人进程,主要包含:接收来自外界的信号,向各工人进程发送信号,监控工人进程的运行状态,当工人进程退出后(异常情况下),会自动重新启动新的工人进程。主人进程充当整个进程组与用户的交互接口,同时对进程进行监护。它不需要处理网络事件,不负责业务的执行,只会通过管理工人进程来实现重启服务,平滑升级,更换日志文件,配置文件实时生效等功能。

  

3。Nginx + FastCGI运行原理
Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用.FastCGI接口在Linux下是套接字(这个插座可以是文件插座,也可以是ip套接字)。包装为了调用CGI程序,还需要一个FastCGI的包装(包装器可以理解为用于启动另一个程序的程序),这个包装绑定在某个固定套接字上,如端口或者文件插座。当Nginx将CGI请求发送给这个插座的时候,通过FastCGI接口,包装器接收到请求,然后叉(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据,接着包装器再将返回的数据通过FastCGI接口,沿着固定的套接字传递给Nginx,最后Nginx将返回的数据(html页面或者图片)发送给客户端。

  

 Nginx工作原理

Nginx工作原理