我试图弄清楚如何在 NGINX 的upstream
负载平衡指令中执行一些 if-else 逻辑。基本上,我想使用以下方法:
hash $cookie_my_cookie_name consistent;
...如果cookie ( my_cookie_name
) 存在。如果该cookie不存在,那么我希望上游选择方法回退到内置:
ip_hash;
我无法在 NGINX 的文档中的任何地方找到有关如何“尝试”一种上游选择方法的示例,如果这种方法不起作用,请选择另一种方法。
我担心但担心的情况是,如果 cookie 不存在,则$cookie_my_cookie_name
变量(至少在日志中)插入到-
,这是一个字符串,但总是会散列到同一个上游服务器,这正是我不想要。(因此测试需要针对不存在 cookie,如果存在,将始终保持“好”值。)
有任何想法吗?
您应该能够使用一个或多个
map
块来转换您的哈希键。未测试:
不过,我认为您在问题中描述的内容并不能很好地满足大多数目的。设置 cookie 后,上游可能会发生变化——这可能意味着用户在设置 cookie 后立即转移到没有缓存其历史记录的上游。
相反,考虑将散列键映射到类似大小合理的 IPv4/IPv6 地址前缀,并默认为 cookie 使用相同的机制,因此默认情况和基于 cookie 分配的上游解析为相同的值,最初。