如何让nginx了解cookie值中的点?

我把Nginxconfiguration成简单的粘性LB. configuration的一个关键部分是匹配cookie值到服务器地址。 这工作正常:

map $cookie_sessionServer $http_sticky_backend { default 0; Server_A 192.168.73.210:1337; Server_B 192.168.73.210:1338; } 

现在,我必须添加点cookie值(为什么是另一个故事)。 但是当我改变configuration,它停止工作。

 map $cookie_sessionServer $http_sticky_backend { default 0; .Server_A 192.168.73.210:1337; .Server_B 192.168.73.210:1338; } 

没有错误,在debugging日志中没有任何用处,这个映射只是“返回”了默认值(0),粘性逻辑被跳过了。

我也试过\.Server_A 192.168.73.210:1337;".Server_A" 192.168.73.210:1337;~^\.Server_A$ 192.168.73.210:1337;~\.Server_A$ 192.168.73.210:1337;

但这一切都没有为我工作=(

如果您想使用粘性会话,可以使用其他模块来避免nginx和商业实现:

  • 上游JVM路由
  • nginx的粘性模块-NG

你需要重新编译nginx,但这并不难。

你也可以使用tengine ,一个nginx开源的fork也可以实现粘性会话 。

如果您绝对想这样做, 那么当cookie丢失时您将失去负载均衡的优势,直到您在块捕获此exception时编写丑陋为止。 另外,如果您使用max_failsfail_timeout设置上游检查, max_fails 您将失去上游状态池优势,并最终尝试将请求转发给遭受故障的服务器

对于这个logging来说,你可以用map指令来完成部分工作 (考虑我刚才讲的):

 map $cookie_sessionServer $route { default 0; "~\.Server_A$" 192.168.73.210:1337; "~\.Server_B$" 192.168.73.210:1338; } server { [ ... ] location /foo { proxy_pass http://$route; } } 

用nginx 1.6.2testing