一.Nginx是什么?
Nginx (“engine x”) 是一个高性能的WEB和反向代理服务器,也是一个IMAP/POP3/SMTP 邮件代理服务器。它具有有很多非常优越的特性:
作为 Web 服务器:相比 Apache,Nginx 选择了 epoll and kqueue 作为开发模型,基于事件驱动架构。使用更少的资源,支持更多的并发连接,它能够支持高达 50,000 个并发连接数的响应。
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
Nginx 安装非常简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。
关于代理
Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
正向代理
正向代理也是大家最常接触的到的代理模式。简单的举例来说,比如国外的一个网站(www.google.com)我访问不了,但我能访问一个代理服务器,而且这个代理服务器能访问这个网站。于是我先连上代理服务器,告诉他我需要的那个网站,代理服务器去访问该网站,然后将获取的数据返回给我。
上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端。
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
正向代理,它代理的是客户端,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
反向代理
明白了什么是正向代理,继续看关于反向代理的处理方式。现在的大型网站基本都会使用分布式部署,即后端部署多台服务器来应对大量的网络请求。通常这些服务器集群就会通过一台代理服务器去接收客户端的请求,这台代理服务器接收请求之后,再分发给集群中的某一台服务器去处理。这就是一个反向代理的过程。示意图如下:
通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
反向代理,它代理的是服务端,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
总结
正向代理:针对客户端而言, 代理服务器代理客户端,转发客户端的请求,并将获得的内容返回给客户端。
反向代理:针对客户端而言, 代理服务器代理服务端,客户端看到的是代理服务器就,但真正处理请求的是代理服务器后面web服务器集群,集群中的服务器节点处理完请求后,再返回给代理服务器,由代理服务器代为返回数据给客户端。
负载均衡
Nginx可以扮演了反向代理服务器的角色,对于客户端发送的、Nginx反向代理服务器接收到的请求数量,就是我们说的负载量。请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。
将服务器接收到的请求按照规则分发的过程,称为负载均衡。