Nginx概述

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。
Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。
Nginx做为HTTP服务器,有以下几项基本特性:

  • 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲
  • 无缓存的反向代理加速,简单的负载均衡和容错
  • FastCGI,简单的负载均衡和容错
  • 模块化的结构。包括gzipping, byte ranges,chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待
  • 支持SSL 和 TLSSNI

Nginx的优点:

  • Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。
  • Nginx具有很高的稳定性。Nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对Nginx来说基本上是毫无用处的。
  • Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。
  • Nginx采用master-slave模型,能够充分利用SMP的优势,且能够减少工作进程在磁盘I/O的阻塞延迟。
  • Nginx代码质量非常高,代码很规范,手法成熟, 模块扩展也很容易。

代理

正向代理

我们在访问“你懂得”的网站的时候,需要挂“梯子”,这里的“梯子”就是正向代理。你访问“梯子”,“梯子”访问目标网站。一般情况下,我们可能没有权限直接访问目标地址,可以通过代理来访问目标地址。对于目标服务器来说,它只知道它在和代理服务器进行数据交换,而并不知道代理背后的客户端是谁,这就起到了隐藏客户端的作用。另外,可以通过代理服务器做数据统计,比如,我希望知道我的客户访问a网站多少次,访问b网站多少次,访问c网站多少次,用户访问代理服务器地址,代理服务做流量统计后,再将请求发到目的服务器。

反向代理

说完了正向代理,再看反向代理,其实就好理解了。反向代理可以让服务端隐藏起来,客户只需要访问反向代理服务器,实际上反向代理服务器背后由哪个服务给用户处理请求,这一点对用户是完全无感知的。反向代理隐藏了服务端。

负载均衡

随着业务的复杂,数据量增长,之前平均一秒钟十个请求,现在变成了平均每秒钟100个请求,之前的架构可能支撑不住了,这时候,多增加几台服务器来扛就是了,为了把请求均衡的分配到各个服务器上,需要由Nginx来帮忙,Nginx可以将请求平均的分配到多台机器上,也可以不平均,按照权重分配也可以,从而降低每台的压力。

动静分离

还是为了提高性能,这里以Web项目举例,一个Web项目里有静态资源和动态资源,可以将动态资源和静态资源进行分开,一(多)台机器专门处理静态资源,一(多)台机器专门处理动态资源。将资源进行分隔的工作,就是由Nginx来做的。