深入浅出,Nginx详解与使用
1. 服务架构图例:
1.1 服务架构的演变
- 上图描述了最为简单得服务架构方式。 一个服务器,直接接收客户端的请求,然后返回数据。 我们平时使用SpringBoot在本地调试程序的时候就是这样的形式。
如果客户端请求较少的话,这种形式是没有问题的。那如果现在客户端请求特别多,并发很高。那怎么办呢?
- 这个时候我们回想到服务器集群这个东西。把同样的服务器多部署几台,横向的扩展的整个程序的体量。
- 但是我们发现一个问题,虽然我们部署了三台服务器了,我们怎么去控制每一个请求去访问哪个服务器呢? 如上图,在没有控制的情况了,所有的请求还是打在了中间的服务器上面,中间的服务器一样也是不堪重负的状态,其他两台服务器根本没有起到分担重任的作用。这个时候我们就会考虑:
- 在服务器前面,再加一个服务。拦截所有的客户端请求,然后根据配置动态的选择某个服务器,将请求转发到目标服务器上!我们需要这样一个中间服务,这个就是nginx。
2. 什么是nginx:
我们看百度百科是怎么解释的:
确实是,看得云里雾里的,官方就特别喜欢用一些高深的让人看不懂的字眼来解释一个简单的东西。
一句话:
2.1 nginx的作用:
2.1.1反向代理:
百度百科说,nginx是反向代理,那什么是正向代理什么是反向代理呢?
是用来代理服务器的。代理服务器接收客户端发来的请求,然后将请求转发给内部网络的服务器集群,并从服务器上得到结果并返回给客户端。客户端此时访问的就是代理服务器,它不需要知道代理服务器具体访问哪个服务器。
客户端是不知道代理的存在的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问,很明细nginx就冲到了这样的角色。
2.1.2正向代理(了解):
是用来代理的是客户端。拦截客户端发的请求,然后代理服务器自己去发送真正的请求。
就像是有时候我们需要访问国外的服务器,但是身处国内客户端是无法通过浏览器访问的,这时我们就需要一个“中间服务器”进行访问,这个“中间服务器”就是“正向代理服务器”,我们通过“正向代理服务器”去访问国外的网站,然后“正向代理服务器”将访问到的数据传递给我们,此时,客户端和正向代理服务器是同属于一个环境下的。
2.1.3 负载均衡:
看上图。现在我们有三台服务器运行着,依次有三个请求想要访问我们的服务器。
请求1被nginx拦截,那么nginx该去访问哪个服务器呢?
这里就要说到nginx的负载均衡机制了。类似于SpringCloud中的Ribbon。
-
轮询机制。
如果我们的nginx是轮询机制,那么请求1进来,会去访问服务器1;请求2会去2访问服务器2.。。。以此类推。 -
权重机制。
每个服务器的权重不同,权重越大的服务器,nginx访问它的概率就会越大。 -
ipHash
根据配置,我们可以达到固定的访问ip去访问固定的服务器。 比如同一个客户端,永远访问的是服务器1。 另一个客户端永远访问的是服务器2。
2.1.4 动静分离:
动静分离是指将客户端访问的静态资源和动态资源分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。可以将静态资源缓存,动态资源跳相应的后台服务器进行处理。