前言

nginx的作用呢,相信大家都是特别熟悉的了,这里也就不多说了,但是以防还有处于懵懂状态的同学,还是简单介绍一下负载均衡。

我们平时在一台服务器搭建起应用后,万一承受量超过了他的极限,这样的话,服务就会垮掉,所以,我们为了不让这样的事情发生,通常情况下是使用nginx的一个负载均衡的功能,他能够将发来的请求,均匀的,或者是特定的去分配给多台服务器,来提高承受并发的能力。

配置

/etc/nginx下,(这是默认目录,如果你的nginx不在这里,那去对应的地方即可)

打开nginx.conf,在http模块下任意位置写上如下配置,这个服务器集群名可以随意起

upstream 服务器集群名{
            server 127.0.0.1:8000;
            server 39.98.35.129:8000;
        }

然后我们去server配置,然后注释掉我们本来的地址proxy_pass,改为变量绑定,要注意的是,nginx是一个很神奇的东西,所以,多一个斜杠少一个斜杠都会定成败,一定要注意。

location /api/ {
            proxy_set_header X-Real-IP $remote_addr;
            # proxy_pass http://127.0.0.1:8000/;
            proxy_pass http://服务器集群名/;
            proxy_set_header   Host    $host;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }

nginx负载均衡的默认策略是轮询,也就是轮着来,如果你的服务器配置是差不多的情况下,是不用改的。还有一种常见的策略,就是权重,在配置服务器集群的那里,来给每个节点配置不同的权重,他们就会接到对应的几率来获得访问,像这样:

upstream 服务器集群名 {
    server 127.0.0.1:8000 weight=3;
    server 39.98.35.129:8000 weight=7;
}

ip_hash( IP绑定)
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream backserver {
    ip_hash;
    server 127.0.0.1:8000;
    server 39.98.35.129:8000;
}