nginx负载均衡

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; # 将请求代理到上游服务器组
                 # 可以添加其他代理相关的配置,如代理超时、缓冲区大小等
             }
         }
     }
    
posted @ 2024-03-13 16:29  土豆泥呀  阅读(45)  评论(0)    收藏  举报