本文参考:http://blog.csdn.net/xlgen157387/article/details/49781487
1.概念
Nginx——Ngine X,是一款自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;也就是说Nginx本身就可以托管网站(类似于Tomcat一样),进行Http服务处理,也可以作为反向代理服务器使用。
Nginx 解决了服务器的C10K(就是在一秒之内连接客户端的数目为10k即1万)问题。它的设计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制—事件驱动机制,是一种异步事件驱动结构。
虽然目前Nginx的份额在市场上只占很少部分,但是其高性能和低消耗内存的结构,使得其越来越普遍,典型的一个应用就是我们可以使用Nginx作为反向代理进行网站的负载均衡器。例如:Wordpress、GitHub等知名的网站都使用到了Nginx。
目前项目中也用到了Nginx作为反向代理实现网站的负载均衡。
2.正向代理与反向代理的区别
3.nginx的特点
Ø 配置异常简单:非常的简单,易上手。
Ø 非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能支持5万并发连接,实际生产中能跑2~3万并发连接数(得益于Nginx采用了最新的epoll事件处理模型(消息队列)。
Ø Nginx代理和后端Web服务器间无需长连接;
Ø Nginx接收用户请求是 异步 的,即先将用户请求全部接收下来,再一次性发送到后端Web服务器,极大减轻后端Web服务器的压力。
Ø 发送响应报文时,是边接收来自后端Web服务器的数据,边发送给客户端。
Ø 网络依赖性低,理论上只要能够ping通就可以实施负载均衡,而且可以有效区分内网、外网流量。
Ø 支持内置服务器检测。Nginx能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上。
Ø 采用Master/worker多进程工作模式
Ø 此外还有内存消耗小、成本低廉(比F5硬件负载均衡器廉价太多)、节省带宽、稳定性高等特点
4.nginx的基本模块
Nginx的核心模块包括内核模块和事件驱动模块,即:CoreModule和EventsModule;另外还有第三方模块 HTTP内核模块,HttpCoreModule,它是Nginx服务器的核心模块。
CoreModule和EventsModule模块的配置相对于HttpCoreModule会少一些,但是它们的配置将会影响系统的性能,而非功能上的差异。
1、CoreModule用于控制Nginx服务器的基本功能;
2、EventsModule用于控制Nginx如何处理连接。该模块的指令的一些参数会对应用系统的性能产生重要的影响;
3、HttpCoreModule提供HTTP访问Nginx服务器,该模块是不能缺少的。
5.内部进程模型
Nginx是以多进程的方式来工作的,当然Nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是Nginx的默认方式。Nginx采用多进程的方式有诸多好处。
Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控 worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器CPU核数一致,这里面的原因与Nginx的进程模型以及事件处理模型是分不开的
6.处理请求
此时,客户端就可以向Nginx发起连接了。当客户端与Nginx进行三次握手,与Nginx建立好一个连接后,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建Nginx对连接的封装,即ngx_connection_t结构体。
接着,设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。最后,Nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了。
7.实际应用
由于Nginx是由俄罗斯人写的,所以,Nginx 已经在俄罗斯最大的门户网站── Rambler Media(www.rambler.ru)上运行了3年时间,同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。
在国内,已经有淘宝、新浪博客、新浪播客、网易新闻、六间房、56.com、Discuz!、水木社区、豆瓣、YUPOO、海内、迅雷在线等多家网站使用 Nginx 作为Web服务器或反向代理服务器