Nginx的反向代理、负载均衡和动静分离

为什么要用Nginx

什么是Nginx

Nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强

为什么要用Nginx不用tomcat

同样是做代理,为什么用nginx服务器代理,不直接用tomcat 7.0,还做多了一次接请求呢?事实上,nginx常用做静态内容服务和代理服务器,直面外来请求转发给后台的应用服务(tomcat,django等),tomcat更多用来做一个应用容器,让java web app在其中运行,对应同级别的有jboss,jetty等

Nginx的反向代理

正向代理

如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。比如当我们想访问网页www.google.com时,并不能直接访问,我们需要在浏览器端配置一下代理服务器,再通过代理服务器去访问www.google.com,这种依赖代理服务器进行网络访问的过程就叫正向代理。
Nginx的反向代理、负载均衡和动静分离_第1张图片

反向代理

Nginx最著名的其实是反向代理,是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
Nginx的反向代理、负载均衡和动静分离_第2张图片

反向代理时,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,这时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址、隐藏了真实服务器IP地址。比如当我们想访问网页www.google.com时,如果使用反向代理服务器,首先将发送请求到反向代理服务器,反向代理服务器根据请求把请求转发到不同的tomcat中,此时客户不是直接访问tomcat而是访问反向代理服务器,暴露的是反向代理服务器端口号隐藏了tomcat真实的端口号。

Nginx的负载均衡

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务 器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

最简单的一个请求过程就是客户端发送请求到服务器,服务器处理请求,可能有一些要与数据库交互,从数据库获取信息返回服务器,服务器处理完毕后将结果返回给客户端。
但是随着访问量和数据量不断增长,业务复杂度增加,并发量大还可能导致服务器直接崩溃,这都是服务器性能瓶颈造成的问题。除了升级服务器性能、配置,我们还可以增加服务器的数量,也就是所谓的集群,将原来请求发送到一个服务器上的情况改为发送到不同的服务器上,将负载发送到不同服务器,也就是所谓的负载均衡。

在使用Nginx时,Nginx会把客户端发送给反向代理服务器的请求平均分发给服务端集群中的不同服务器,这就是轮循,除此以外,如果其中一台服务器性能比较好,想让其承担更多的压力,还可以设置权重。

Nginx的动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

当客户端发送请求时首先会经过Nginx的反向代理服务器,Nginx再把请求转发到tomcat中,如果不使用动静分析,tomcat中将包含http、css、js等静态资源以及jsp、vue、servlet等动态资源,就算只访问静态资源,加载时间也很长。而经过动静分离后,tomcat中只部署动态资源,如果访问的是动态资源,就由Nginx转发,去tomcat中获取动态资源。如果是访问静态资源,就专门用一台静态资源服务器,只放静态资源,让Nginx指向静态资源服务器,当访问静态资源时,Nginx就去静态资源服务器中获取。这个过程就叫做动静分离。
Nginx的反向代理、负载均衡和动静分离_第3张图片

你可能感兴趣的:(Java,数据库,nginx,分布式,java)