nginx负载均衡

随笔3个月前发布 月落伤旋
32 0 0

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; # 将请求代理到上游服务器组
             # 可以添加其他代理相关的配置,如代理超时、缓冲区大小等
         }
     }
 }
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...