Nginx可以实现高并发情况下的负载均衡,有效地转发客户端对服务器的请求,使得后端服务器平稳运行。
Nginx的三大功能:反向代理、动静分离、负载均衡
1、反向代理:反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,简单来说就是真实的服务器不能直接被外部网络访问,想要访问必须通过代理。
2、动静分离:运用Nginx的反向代理功能分发请求:所有动态资源的请求交给应用服务器,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻应用服务器的压力
3、负载均衡:负载均衡也是 Nginx常用的一个功能,当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。
Nginx实现负载均衡upstream的四种分发策略:
1.轮询(默认)——每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2.weight ——指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3. ip_hash ——每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
4.backup——其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
5.down——表示单前的server暂时不参与负载
6.fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
准备环境:
这里我们准备了一台nginx1.14.0服务器和两台tomcat服务器,端口分别是8080和8081,部署到阿里云centos7的环境下。这些新开的端口,要记得在阿里云的安全组策略里添加,并重启服务器,端口才能生效访问。
编辑nginx目录下的conf/nginx.conf,修改如下截图
把项目demo.war部署分别部署到tomcat下面,一个页面输出8080,另一个输出8081
不断地刷新页面,我们可以发现,返回客户端的数据是在8080和8081这两个项目之间轮循,说明达到了分发的效果,可以根据nginx.conf配置的weight设置访问权重。
所谓的反向代理,就是nginx代理服务器端,为客户端去处理请求分发,这时候不用去客户端设置任何配置,所有的客户端请求nginx服务器,由nginx配置请求分发策略,使得nginx达到负载均衡,这种情况客户端是不知道具体的最终服务器的,只知道前端服务器nginx的地址,有效地保护的最终服务器的安全,避免暴露最终服务器。而正向代理,代理的是客户端,需要在客户端设置访问信息,类似更新ip和网关,知道目标服务器的网络信息,一个比较实际的例子就是,代理服务器代理客户端去访问最终服务器。
动静分离
首先我们不在web项目里放图片资源,但是定义的图片路径,这样是不会显示图片的,nginx访问会出错,如下图
现在我们配置下nginx.conf的动静分离,为nginx设定静态资源的访问信息
下图的红色框框,分别设置了静态资源和动态资源的访问设置,静态是访问nginx下面的im路径里的文件,动态转发到tomcat分发策略处理,注意这里设置location后面的大括号前面需要空格
设置了静态资源访问的location后,nginx访问就正常了,但是还没有显示图片,因为我们还没把图片放到im目录下
上传图片
图片显示出来了
这样就是实现的静态资源访问nginx的im目录下的文件,动态jsp文件访问集群配置tomcat。
LVS+keepalived也可以实现双机热备和负载均衡,这个还没学习过,下次再总结分享。