Nginx-反向代理实现及负载均衡策略

反向代理作为客户端和目标服务器的中介,接受客户端发来的请求,通过均衡策略来访问目标服务器,获取数据,返回给客户端。这是最直白的理解,那么反向代理到底时如何实现的呢?

模拟反向代理需要的配置

一台虚拟机、一个nginx服务器作为反向代理服务器、两个tomcat作为目标服务器。

实现反向代理

nginx和tomcat的安装此处就省略了。。。
1、修改Nginx.conf配置文件
这里写图片描述

upstream tomcats{
     server 192.168.128.111:8080;
     server 192.168.128.111:8081;
   }

   server {
        listen       80;
        server_name  tomcat.taotao.com;

        #charset koi8-r;

        #        #access_log  logs/host.access.log  main;

        location / {
          proxy_pass   http://tomcats;
          index  index.html index.htm;
        }
  }

在http节点下,添加upstream节点。upstream配置了tomcat的ip及端口,作为目标服务器。
serve是nginx服务器,作为反向代理服务器,需要注意的是反向代理localtion节点中的proxy_pass配置为:http://+upstream名称,即“http://tomcats
其中的原理正是nginx反向代理服务器通过“http://tomcats”来访问配置好的两台tomcats目标服务器。

2、启动并查看nginx进程
这里写图片描述

3、启动并查看tomcat进程
这里写图片描述
这里写图片描述

4、访问tomcats.taotao.com
这里写图片描述
这里写图片描述
我们可以看到访问反向代理服务器中配置的路径tomcat.taotao.com便可以访问到目标服务器tomcat,刷新页面,可以实现轮流访问8080和8081两台目标服务器。
这样就实现了反向代理。

负载均衡策略

1、轮询
上边的访问策略就是轮询(默认)方式进行负载,我们刷新浏览器可以看到,两台目标服务器几乎是轮流着访问。

upstream tomcats{
     server 192.168.128.111:8080;
     server 192.168.128.111:8081;
   }

2、权重
指定轮询几率,weitht和访问比率成正比。如下图所示,192.168.128.111:8080的访问几率要比192.168.128.111:8081的访问比率高一倍。

upstream tomcats{
     server 192.168.128.111:8080 weight=2;
     server 192.168.128.111:8081;
   }

3、ip-hash
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream tomcats{
     ip_hash;
     server 192.168.128.111:8080;
     server 192.168.128.111:8081;
   }

ip_hash;

4、fair(第三方)
按后端服务器的相应时间来分配请求、相应时间短的优先分配。

upstream tomcats{
     ip_hash;
     server 192.168.128.111:8080;
     server 192.168.128.111:8081;
     fair;
   }

5、url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

upstream tomcats{
     server 192.168.128.111:8080;
     server 192.168.128.111:8081;
     hash $request_uri;
     hash_method crc32; 
 }

猜你喜欢

转载自blog.csdn.net/ldb987/article/details/81434831