问题场景:设置了多个服务器以后,同一个客户端进来的连接会分配到不同的服务器上,在做端口转发的时候就会出现问题,必须保证同一个 IP 来源的请求始终对应同一台服务器。
对于 http
段,配置 ip_hash
:
http {
upstream stream_backend {
ip_hash;
server backend1.example.com:12345;
server backend2.example.com:12345;
server backend3.example.com:12346;
}
}
对于 stream
段,配置 hash $remote_addr
:
stream {
upstream stream_backend {
hash $remote_addr consistent;
server backend1.example.com:12345;
server backend2.example.com:12345;
server backend3.example.com:12346;
}
}
其中,consistent
是可选参数,用来指定 Hash 算法为 ketama consistent hashing method。
参考资源:
https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/