Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处:
负载均衡的好处
- 增加可用资源
- 增加吞吐量
- 加快响应速度,降低延时
- 出错的重试验机制
Nginx主要支持三种均衡算法:
- round-robin
- least-connected 负载饱和度算法,Nginx会将请求转发到链接数最少的那太机器上
- ip-hash 基于访问IP的hash值进行请求分发,适用于一个session的请求必须发送到同一台机器(比如有些Service是有状态)
负载均衡默认配置(round-robin)
http { upstream loadbalancer1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://loadbalancer1; } } }
- 默认的负载均衡服务器采用的是均衡算法是round-robin,按顺序依次处理请求
- 以上配置将发送给Nginx的所有请求转发给代理服务器loadbalancer1,而loadbalancer1是一个配置了三个server的集群环境,每个请求由srv1,srv2,srv3中的一台机器来处理
负载均衡配置(最少链接)
http { upstream loadbalancer1 { least_conn; server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://loadbalancer1; } } }Least-Connected均衡策略适用于请求的场景是有些请求时间长,有些请求时间很多,这样,每次分发时,可以将请求分发到由于执行时间短而空闲的机器
负载均衡配置(IP Hash)
http { upstream loadbalancer1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://loadbalancer1; } } }
负载均衡配置(IP Hash)
http { upstream loadbalancer1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://loadbalancer1; } } }ip_hash均衡策略适用于,将一个客户端(来自同一个IP)的连续请求发送到同一个机器上,这样间接的实现了session保持的功能