nginx负载均衡
使用客户端的真实ip进行hash
-
在经过多层代理后,ip_hash获取到的是服务器的ip,客户端真实ip需要从$http_x_forwarded_for获取;
-
在http模块下增加map模块,返回客户端ip,在upstream模块中使用map的第二个参数进行hash;
http { #参数映射(根据第一个属性的值,从下方列表中匹配值,返回到第二个属性) map $http_x_forwarded_for $client_real_ip { # 获取第一个ip ~^(?P<first_addr>[0-9\.]+),?.*$ $first_addr; # 如果http_x_forwarded_for为空则使用remote_addr服务器ip "" $remote_addr; } # 负载均衡服务池 upstream practiceBoot { hash $client_real_ip; server 192.168.1.100:8080; # 后端服务器1 server 192.168.1.101:8080; # 后端服务器2 } server { listen 80; # 使用上游服务器组进行负载均衡 location /practice{ proxy_pass http://practiceBoot/practice;# 将请求代理到上游服务器组 # 可以添加其他代理相关的配置,如代理超时、缓冲区大小等 } } }
轮询
-
轮询是默认负载均衡模式,每个请求按照顺序分配给后端服务器,保证每个服务器平等负载。
http { # 定义上游服务器组 upstream practiceBoot { server 192.168.1.100:8080; # 后端服务器1 server 192.168.1.101:8080; # 后端服务器2 # 可以继续添加更多的后端服务器 } server { listen 80; # 使用上游服务器组进行负载均衡 location /practice { proxy_pass http://practiceBoot/practice; # 将请求代理到上游服务器组 # 可以添加其他代理相关的配置,如代理超时、缓冲区大小等 } } }
IP Hash
-
通过对客户端IP地址计算出一个Hash值,再将该值与后端服务器列表进行匹配,实现同一客户端访问同一服务器的功能。
http { # 定义上游服务器组 upstream practiceBoot { ip_hash; server 192.168.1.100:8080; # 后端服务器1 server 192.168.1.101:8080; # 后端服务器2 # 可以继续添加更多的后端服务器 } server { listen 80; # 使用上游服务器组进行负载均衡 location /practice { proxy_pass http://practiceBoot/practice; # 将请求代理到上游服务器组 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 其他代理设置... } } }
最少连接
-
将请求发送到当前连接数最少的服务器,以实现最均衡的负载均衡。
http { # 定义上游服务器组 upstream practiceBoot { least_conn; # 使用最少连接策略 server 192.168.1.100:8080; # 后端服务器1 server 192.168.1.101:8080; # 后端服务器2 # 可以继续添加更多的后端服务器 } server { listen 80; # 使用上游服务器组进行负载均衡 location /practice { proxy_pass http://practiceBoot/practice; # 将请求代理到上游服务器组 # 可以添加其他代理相关的配置,如代理超时、缓冲区大小等 } } }
基于请求URI的负载均衡
-
可以通过反向代理设置规则,根据请求URI的不同将请求分配到相应的服务器上。
http { # 定义上游服务器组 upstream practiceBoot { hash $uri; server 192.168.1.100:8080; # 后端服务器1 server 192.168.1.101:8080; # 后端服务器2 # 可以继续添加更多的后端服务器 } server { listen 80; # 使用上游服务器组进行负载均衡 location /practice { proxy_pass http://practiceBoot/practice; # 将请求代理到上游服务器组 # 可以添加其他代理相关的配置,如代理超时、缓冲区大小等 } } }