一、什么是HTTP Upstream模块?
Upstream模块是Nginx服务器的一个重要模块。Upstream模块实现在轮询和客户端ip之间实现后端的负载均衡。(意思就是说:客户端ip请求到服务端的时候,会从upstream的ip列表中从上到下逐个轮询,轮询到最后一个的时候,会重新跳到第一个ip,再次进行轮询选择)
二、ip_hash指令:
1、简介:
在负载均衡系统中,假如用户在某台服务器上登录,那么如果该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的一个服务器,那么此时如果将已经登录服务器A的用户在定位到其他服务器,显然不妥。故而,我们可以采用ip_hash指令解决这个问题,如果客户端请求已经访问了服务器A并登陆,那么第二次请求的时候,会将该请求通过哈希算法自动定位到该后端服务器中。
2、配置:
http {
#设置带负载均衡的ip列表,一般是服务器集群中的那些子服务器的ip地址
upstream mypro {
ip_hash;
server 182.18.79.243;
server 140.205.140.234;
}
server {
listen 8080;
location / {
proxy_pass http://mypro;
}
}
}
上述代码中ip_hash
那句话就可实现用户不管登录几次都不会因为负载均衡而乱了阵脚,都会自动定位到上次登录的那个服务器,而不同用户登录则依旧会实现负载均衡的效果。*
三、Server指令的权重
http {
#设置带负载均衡的ip列表,一般是服务器集群中的那些子服务器的ip地址
upstream mypro {
#ip_hash;
#weight:权重。默认是1.数字越大,权重越大。
#权重越大,被访问到的概率越大。
server 182.18.79.243 weight=2;
server 140.205.140.234;
}
server {
listen 8080;
location / {
proxy_pass http://mypro;
}
}
}
注意:要想实现权重,则必须注释掉ip_hash,因为ip_hash同一个用户每次都访问同一个服务器,这点与权重冲突。上述的权重意思是:182.18.79.243 这个ip被访问到的几率是三分之二。而下面那个ip为三分之一。
四、upstream指令及相关变量
upstream指令主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用代理服务器,默认负载均衡方式为轮询。
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货: