Nginx了解

Nginx

引言

客户端,tomcat服务器,数据库

客户端发送请求到服务器端,服务器内部的java程序会基于jdbc和数据库建立连接,最终给客户端个响应。

在此过程中,客户端用户不断增多,请求量不断增大,并发量增高,服务器可能承受不住客户端发送过来请求的压力,可以针对服务器搭建它的集群,客户端可以将请求发送给这多个服务器,同时服务器2也可以和数据库建立连接

其中有这些个问题?

  1. 客户端到底将请求发送给哪台服务器(哪个ip和端口号上),客户端没办法维护这么多ip和端口号。
  2. 假设所有客户端的请求都发送给了服务器1,那么服务器2的集群相当于没有意义。
  3. 客户端发送的请求可能是申请动态资源的,也有申请静态资源的,无论哪种资源都会把请求发送到tomcat服务器中,查找需要的内容,这时候对于静态资源消耗的有些多了

可以在客户端和服务器之间搭建个nginx反向代理服务器,所有客户端请求都会交给nginx处理,客户端也只需要知道nginx服务器的ip和端口号,之后nginx到底把请求发送给服务器1还是服务器2,客户端不用关注;还有nginx会做个负载均衡的策略,会根据某个算法决定将请求发送给服务器1还是2合适;nginx还可以实现动静分离,将动态资源交给服务器处理,静态资源自己就可以处理,不用经过服务器,效率更高一些

Nginx介绍

Nginx是什么?用来做什么事情?

Nginx是由俄罗斯人研发的,是来应对俄罗斯访问量第二大的网站Rambler的并发问题。在2004年发布的第一个版本。

Nginx是一个高性能的HTTP和反向代理服务器

Nginx特点:

  • 稳定性极高,7 * 24小时不间断运行;
  • nginx提供了非常丰富的配置实例,容易上手;
  • 占用内存小,并发能力强。国内百度,京东,淘宝等都在使用nginx,淘宝的双11是基于nginx二次封装的一门技术扛过双11并发。tomcat服务器线程池默认150个,相当于tomcat只能承受150个并发;而nginx随着配置,最高能承受5万个并发

概念

反向代理

先来说正向代理

在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

假设用户想去访问www.google.com网址,不能直接访问。如何才能访问到呢。在客户发送请求与访问网站之间要经过一个代理服务器。浏览器要配置代理服务器,通过代理服务器访问网址,将内容返回给客户端的过程
Nginx了解

反向代理

客户端对代理无感知。客户端不需要任何配置就可以访问tomcat服务器(如端口号为8001)。需要将请求发送给反向代理服务器(假设端口9001),由反向代理服务器(根据请求不同转发到不同tomcat服务器上)去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器IP地址。客户端访问的是9001端口号,不知道8001,8001是通过反向代理服务器转发过来的
Nginx了解

负载均衡

很普通的请求与响应的过程

客户端发送请求给服务器端,服务器可能会操作数据库或得到数据库中的内容,数据库数据要返还给服务端,服务端把数据库返还的数据最终返回给客户端,在客户端做个显示,这过程叫做响应。

这种情况适用于相对单一的系统,并发请求较少的。

随着信息量增长,访问量以及系统业务的复杂度增加,这种架构会造成服务器响应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器崩溃,或者服务器性能瓶颈造成问题

单个服务器解决不了,我们增加服务器的数量,将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器上,就是所说的负载均衡

将请求通过nginx反向代理服务器平均分担到集群中的不同服务器上。一般项目都会做到负载均衡的效果
Nginx了解

动静分离

客户端发送请求先到nginx,nginx根据请求把它们转发到不同服务器上
Nginx了解

请求静态资源或动态资源都去请求tomcat服务器,给tomcat的压力很大

动静分离,将动态资源与静态资源分开进行部署。

访问nginx,如果是动态资源,访问tomcat,把请求的数据得到;但是若是静态资源,由专门一台服务器,可以叫做静态资源服务器,专门放静态资源,由静态资源服务器拿出静态资源给你返回

Nginx了解