Nginx与Tomcat
一、什么是Nginx
Nginx实际上是代理服务器的一种。从架构方面来看,它处于客户端与真正服务器(部署应用的服务器)之间,如下图所示。 由于Tomcat服务器的高并发性能很弱,为了提高并发性能,我们可以在Tomcat服务器与客户端之间部署Nginx服务器,由Nginx反向代理各个真正服务器。
二、代理与反向代理
首先我们来回顾一下什么是代理,代理也称为正向代理,为了从真正服务器获取资源,我们向代理服务器发送请求,由代理服务器向真正的服务器发送请求,真正的服务器接受请求并响应,然后将结果发送给代理服务器,再由代理服务器将结果响应给发出请求的主机。
纵观整个过程,不难发现,对于真正的服务器而言谁是真正的请求者它无从得知,因为完全是由代理服务器与真正服务器进行交互。正向代理的一个很好的用处便是保护客户端的私密性。
反向代理正好相反,客户机发送请求至反向代理服务器,实际上,客户端并不知道它访问的是一个代理,反向代理服务器接收请求,随后判断这个请求发往哪个服务器,真正服务器处理完请求后,将响应给代理服务器,然后代理服务器将结果返回给客户端。
对于客户端来说,它无从知晓是哪一台服务器对它进行的响应。
总结一下代理与反向代理的区别:
- 代理的对象不同
正向代理,代理的对象是客户端主机,对于服务器而言正向代理服务器是透明的。
反向代理,代理的对象是服务器,对于客户端主机而言反向代理服务器是透明的。 - 用途不同
正向代理主要用来连接内网与外网,从而使内网主机能够访问外网,并保护了内网主机的隐私性。
反向代理主要用来维护服务器集群的安全性,并可以提高并发性能。
三、Nginx代理的应用
在之前开发web应用时,我们通常将html、css等静态资源以及动态资源统一部署在Tomcat中,这在无形中占用了Tomcat服务器的大量空间,降低了性能,再者如果为了访问分流而在多个Tomcat服务器放置多份相同的静态资源显然不是明智的选择。
为解决上述问题,我们可以使用Nginx与Tomcat结合的方式,对于同一个应用的静态资源我们完全可以将其放置在Nginx代理服务器上,在用户请求时直接返回给用户,对于逻辑处理和动态资源我们可以交由Tomcat处理。
我们可以将应用部署在多台Tomcat服务器,在遇到大流量的访问时,我们可以使用Nginx自身的负载均衡功能,将流量向多台服务器进行分流。