什么是Nginx?

什么是nginx?

nginx是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。主要有反

向代理,负载均衡的功能。

Nginx 是由俄罗斯人 Igor Sysoev 设计开发的,开发工作从2002 年开始,第一次公开发布在 2004 年

10 月 4 日。

官方网站为:http://nginx.org/ 。它是一款免费开源的高性能 HTTP 代理服务器及反向代理服务器

(Reverse Proxy)产品,同时它还可以提供 IMAP/POP3 邮件代理服务等功能。它高并发性能很好,官

方测试能够支撑 5 万的并发量;运行时内存和 CPU 占用率低,配置简单,容易上手,而且运行非常稳

定。

​http://tengine.taobao.org/:淘宝网发起。​

什么是Nginx?_服务器

2、Nginx的常用功能

其实 Nginx 的功能特别多,这里我只介绍几个常用的功能,具体的大家可以参考官网介绍。

①、反向代理

这是 Nginx 服务器作为 WEB 服务器的主要功能之一,客户端向服务器发送请求时,会首先经过

Nginx 服务器,由服务器将请求分发到相应的 WEB 服务器。正向代理是代理客户端,而反向代理则是代

理服务器,Nginx 在提供反向代理服务方面,通过使用正则表达式进行相关配置,采取不同的转发策

略,配置相当灵活,而且在配置后端转发请求时,完全不用关心网络环境如何,可以指定任意的IP地址

和端口号,或其他类型的连接、请求等。

②、负载均衡

这也是 Nginx 最常用的功能之一,负载均衡,一方面是将单一的重负载分担到多个网络节点上做并

行处理,每个节点处理结束后将结果汇总返回给用户,这样可以大幅度提高网络系统的处理能力;另一

方面将大量的前端并发请求或数据流量分担到多个后端网络节点分别处理,这样可以有效减少前端用户

等待相应的时间。而 Nginx 负载均衡都是属于后一方面,主要是对大量前端访问或流量进行分流,已保

证前端用户访问效率,并可以减少后端服务器处理压力。

③、Web 缓存

在很多优秀的网站中,Nginx 可以作为前置缓存服务器,它被用于缓存前端请求,从而提高 Web服

务器的性能。Nginx 会对用户已经访问过的内容在服务器本地建立副本,这样在一段时间内再次访问该

数据,就不需要通过 Nginx 服务器向后端发出请求。减轻网络拥堵,减小数据传输延时,提高用户访问

速度。

3、什是反向代理?

反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将

请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时

反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地

址。

什么是Nginx?_反向代理_02

什么是Nginx?_反向代理_03

理解这两种代理的关键在于代理服务器所代理的对象是什么,正向代理代理的是客户端,我们需要在客

户端进行一些代理的设置。而反向代理代理的是服务器,作为客户端的我们是无法感知到服务器的真实

存在的。

总结起来还是一句话:正向代理代理客户端,反向代理代理服务器。

4、什么是负载均衡?

将服务器接收到的请求按照规则分发的过程。

weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,

某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。

这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请

求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不

同的后端服务器硬件配置进行调整的。

ip_hash: 每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客

户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问

题。

fair: 智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时

间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;

结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用

这种调度算法,请安装upstream_fair模块

url_hash: 按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可

以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,

要使用的话需要安装nginx的hash软件包