Nginx负载均衡有四种方案配置
1.轮询
轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器上。
注意:
- 缺省配置就是轮询策略;
- nginx负载均衡支持http和https协议,只需要修改proxy_pass后协议即可;
- nginx支持FastCGI,uwsgi,SCGI,memcached的负载均衡,只需要把proxy_pass改为fastcgi,uwsgi_pass,scgi_pass,memcached_pass即可;
nginx配置:
http {
upstream webs {
#默认轮询
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
server {
#监听端口
listen 80;
#监听地址,写ip或者域名
server_name localhost
location / {
#请求转向webs定义的服务器列表
proxy_pass http://webs;
}
}
}
2.最少连接 least_conn
web请求会被转发到连接数量最少的服务器上
注意:
- 最少连接负载均衡通过least_conn指令定义;
- 此策略适合请求处理时间长短不一造成服务器过载的情况;
nginx配置:
http {
upstream webs {
#默认轮询
#ip_hash;
#least_conn
server localhost:8081;
#server localhost:8082;
#server localhost:8083 weight=3;
}
server {
#监听端口
listen 80;
#监听地址,写ip或者域名
server_name localhost
location / {
#请求转向webs定义的服务器列表
proxy_pass http://webs;
}
}
}
3. IP地址哈希ip_hash
前两种负载均衡方案中,同一客户端连续的web请求可能会被分发到不同的后端服务器进行处理,因此如果涉及到会话Session,那么会话会比较复杂,此时可以使用ip_hash的负载均衡策略,同一客户端连接的Web请求会被分发到同一服务器进行处理。
注意:
- ip哈希负载均衡使用ip_hash指令定义;
- nginx使用请求客户端的ip地址进行哈希计算,确保使用同一服务器响应请求;
nginx配置:
http {
upstream webs {
#默认轮询
#ip_hash;
#least_conn
server localhost:8081;
#server localhost:8082;
#server localhost:8083 weight=3;
}
server {
#监听端口
listen 80;
#监听地址,写ip或者域名
server_name localhost
location / {
#请求转向webs定义的服务器列表
proxy_pass http://webs;
}
}
}
4.基于权重 weight
基于权重的负载均衡即Weighted Load Balancing,在这种方式下,我们可以配置Nginx把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配服务器。
注意:
- 权重负载均衡需要使用weight指令定义;
- 权重越高分配到需要处理的请求越多;
- 此策略可以和最少连接负载和ip哈希策略结合;
- 此策略比较适合服务器硬件配置差别较大的情况;
nginx配置:
http {
upstream webs {
server localhost:8081;
server localhost:8082;
server localhost:8083 weight=3;
}
server {
#监听端口
listen 80;
#监听地址,写ip或者域名
server_name localhost
location / {
#请求转向webs定义的服务器列表
proxy_pass http://webs;
}
}
}