Nginx简单介绍

一、 概念


       Nginx——Ngine X,是一款高性能的反向代理server;也是一个IMAP、POP3、SMTP代理server;也是一个Httpserver。也就是说Nginx本身就能够托管站点,进行Http服务处理,也能够作为反向代理server使用。


二、    正向代理和反向代理


       首先。代理server一般指局域网内部的机器通过代理server发送请求到互联网上的server。代理server一般作用在client。比如:GoAgentFQ软件。


  


       反向代理server作用在server端。它在server端接收client的请求,然后将请求分发给详细的server进行处理,然后再将server的对应结果反馈给client。Nginx就是一个反向代理server软件。


  


       从上图能够看出:client必须设置正向代理server,当然前提是要知道正向代理server的IP地址。还有代理程序的port。

       反向代理正好与正向代理相反,对于client而言代理server就像是原始server,而且client不须要进行不论什么特别的设置。client向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将推断向何处(原始server)转交请求,并将获得的内容返回给client。

  

  


三、    特点


  Ø  跨平台:能够在大多数Unix like 系统编译执行。并且也有Windows的移植版本号。

  Ø  配置异常简单:很的简单。易上手。

  Ø  非堵塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非堵塞的。官方測试能支持5万并发连接。实际生产中能跑2~3万并发连接数(得益于Nginx採用了最新的epoll事件处理模型(消息队列)。

  Ø  Nginx代理和后端Webserver间无需长连接。

  Ø  Nginx接收用户请求是异步的,即先将用户请求所有接收下来,再一次性发送到后端Webserver,极大减轻后端Webserver的压力。

  Ø  发送响应报文时,是边接收来自后端Webserver的数据,边发送给client。

  Ø  网络依赖性低,理论上仅仅要能够ping通就能够实施负载均衡,并且能够有效区分内网、外网流量。

  Ø  支持内置server检測。

Nginx可以依据应用server处理页面返回的状态码、超时信息等检測server是否出现问题,并及时返回错误的请求又一次提交到其他节点上。

  Ø  採用Master/worker多进程工作模式

  Ø  此外还有内存消耗小、成本低廉(比F5硬件负载均衡器便宜太多)、节省带宽、稳定性高等特点。


四、    内部进程模型

  
  

       Nginx是以多进程的方式来工作的,当然Nginx也是支持多线程的方式的,仅仅是我们主流的方式还是多进程的方式。也是Nginx的默认方式。

Nginx採用多进程的方式有诸多优点。

       Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程。包括:接收来自外界的信号,向各worker进程发送信号,监控 worker进程的执行状态,当worker进程退出后(异常情况下),会自己主动又一次启动新的worker进程。而主要的网络事件,则是放在worker进程中来处理了。

多个worker进程之间是对等的。他们同等竞争来自client的请求,各进程互相之间是独立的。

一个请求,仅仅可能在一个worker进程中处理,一个worker进程。不可能处理其他进程的请求。

worker进程的个数是能够设置的,一般我们会设置与机器CPU核数一致。这里面的原因与Nginx的进程模型以及事件处理模型是分不开的。


五、    处理请求


  首先,Nginx在启动时,会解析配置文件。得到须要监听的port与IP地址,然后在Nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的IP地址port。再listen),然后再fork(一个现有进程能够调用fork函数创建一个新进程。由fork创建的新进程被称为子进程 )出多个子进程出来。然后子进程会竞争accept新的连接。     

  此时,client就能够向Nginx发起连接了。当client与Nginx进行三次握手。与Nginx建立好一个连接后,某一个子进程会accept成功,得到这个建立好的连接的socket。然后创建Nginx对连接的封装。即ngx_connection_t结构体。

  接着。设置读写事件处理函数并加入读写事件来与client进行数据的交换。最后,Nginx或client来主动关掉连接。到此,一个连接就寿终正寝了。


六、    实际应用


       因为Nginx是由俄罗斯人写的,所以。Nginx 已经在俄罗斯最大的门户站点── Rambler Media(www.rambler.ru)上执行了3年时间,同一时候俄罗斯超过20%的虚拟主机平台採用Nginx作为反向代理server。

       在国内,已经有淘宝、新浪博客、新浪播客、网易新闻、六间房、56.com、Discuz!、水木社区、豆瓣、YUPOO、海内、迅雷在线等多家站点使用 Nginx 作为Webserver或反向代理server。

 

  


posted @ 2017-06-14 08:04  claireyuancy  阅读(229)  评论(0编辑  收藏  举报