Skip to main content

Nginx负载均衡

简介

通过nginx将请求分发到多个不同的服务器上,分担单机服务器的压力。可以转发php-fpm,http,mysql等等请求

负载均衡的几种策略

# [last_conn] 优先发送给接收请求少的,目的是为了让分发的请求更平衡些。
least_conn;

# [ip_hash] 可以记录请求来源的ip,如果是同一个ip,下次访问的时候还是会到相同的主机,这个可以略微解决那种带cookie,session的请求的一致性问题。
ip_hash;

# [hash] 上面ip_hash参数所设置的是根据相同的ip访问相同的主机,这种是根据ip地址,还有一种粒度更小的控制,可以通过任何变量来控制。
hash $request_uri consistent;

# [down] 假如有一台主机是出了故障,或者下线了,要暂时移出,那可以把它标为down,表示请求是会略过这台主机的。
server 127.0.0.1:9000 down;

# [backup] 备份的机器,相对于备份的机器来说,其他的机器就相当于主要服务器,只要当主要服务器不可用的时候,才会用到备用服务器。
server 127.0.0.1:9000 backup;

# [weight] 权重,默认情况下,每台主机的权重都是1,也就是说,接收请求的次数的比例是一样的。但我们可以根据主机的配置或其他情况自行调节,比如,对于配置高的主机,可以把weight值调大。
server 127.0.0.1:9000 weigh=3;

# [max_fails] 默认情况下,max_fails的值为1,表示的是请求失败的次数,请求1次失败就换到下台主机。
# [fail_timeout] 请求失败的超时时间,在设定的时间内没有成功,那作为失败处理。
# 失败的情况:服务器内部错误,超时,无效的头部,或返回500以上的状态码的时候。
server 127.0.0.1:9000 max_fails=2 fail_timeout=30s;

配置示例

# Nginx配置
upstream php_fpm_server {
ip_hash;
server 192.168.137.10:9000 weigh=2;
server 192.168.137.20:9000;
server 192.168.137.30:9000;
server 192.168.137.40:9000 backup;
}

# 其他服务器节点配置www.conf
listen = 192.168.137.30:9000 # 本机暴露的ip地址(开放9000端口)
listen.allowed_clients = 192.168.137.10 # 调用端ip地址