默认情况下,Nginxupstream
指令使用 Round-Robin 将请求分发到后端 realsever,并通过 设置服务器的权重weight
。但我没有看到任何关于权重是否ip_hash
也适用于的字样。
有些人说weight
这不起作用ip_hash
,但我在太多的博客文章中看到过这样的例子,无法一一列举。
问题
- 那nginx-粘性模块?
- 严格使用 cookie-sticky 和忽略权重来分配请求,还是在
weight
Nginx 第一次处理客户端请求时 DO 工作?
答案1
从http://nginx.org/en/docs/http/load_balancing.html
类似地,在 nginx 的最新版本中可以使用最少连接和 ip-hash 负载平衡的权重。
然而,1.8 对我来说效果不太好,至少当用户通过相同上游访问不同域时效果不佳。
答案2
使用sticky cookie
sticky cookie
可以与weight
来自尚未绑定到特定服务器的客户端的请求将被传递到配置的平衡方法选择的服务器。
带有此 cookie 的后续请求将被传递到指定服务器。如果指定服务器无法处理请求,则选择新服务器,就像客户端尚未绑定一样。
upstream backend {
server backend1.example.com;
server backend2.example.com;
# srv_id is the cookie name, set domain=.your.domain.com
sticky cookie srv_id expires=1h domain=.example.com path=/;
}
我认为ip_hash
它不起作用weight
(尚未测试)。