Nginx负载均衡有4种配置方案
1、轮询
轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的web请求分发到不同的后端服务器上
2、最少连接least_conn
web请求会被转发到连接数最少的服务器上
3、IP地址哈希ip_hash
前述的两种负载均衡方案中,同一客户端连接的web请求可能会被分发到不同的后端服务器进行处理,因此如果涉及到会话session,那么会话会比较复杂。常见的是基于数据库的会话持久化。要克服上面的难题,可以使用基于IP地址哈希的负载均衡方案。这样的话,同一客户端连接的web请求都会被分发到同一个服务器进行处理
4、基于权重weight
基于权重的负载均衡即weight load balancing,这种方式下,我们可以配置Nginx把请求更多的分发到高配置的后端服务器上,把相对较少的请求分发到低配服务器上
一、负载均衡配置
1、配置基于Round Robin轮询的负载均衡
需要注意一下几点:
(1)缺省配置就是轮询策略,即Nginx默认为轮询方式
(2)Nginx负载均衡支持http和https协议,只需要修改proxy_pass后协议即可
(3)Nginx支持fastCGI,uwsgi,SCGL,memcached的负载均衡,只需将proxy_pass改为fastCGI_pass,uwsgi_pass即可
(4)此策略适合服务器配置相当,无状态且短平快的服务使用
配置:
http {
upstream netease.com {
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1:8883;
}
server {
listen 80;
server_name:netease.com;
location/{
proxy_pass http://netease.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
2、配置基于ip_hash的负载均衡
需要注意一下几点
(1)IP哈希负载均衡使用ip_hash指令定义;
(2)Nginx使用请求客户端的IP地址进行哈希计算,确保使用同一个服务器响应请求;
(3)此策略适合有状态服务,比如session
配置:
http {
upstream netease.com {
ip_hash;
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1:8883;
}
server {
listen 80;
server_name:netease.com;
location/{
proxy_pass http://netease.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
3、配置基于least_conn的负载均衡
需要注意一下几点:
(1)最少链接负载均衡通过least_conn指令定义;
(2)此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况;
http {
upstream netease.com {
least_conn;
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1:8883;
}
server {
listen 80;
server_name:netease.com;
location/{
proxy_pass http://netease.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}