[alibaba/tengine]配置两个upstream后在浏览器分别访问出现502错误

2024-05-15 223 views
6

在一个或者多个配置文件内配置了多个upstream,且有一个以上的proxy_pass到这些upstream

第一次浏览器访问了其中一个环境后,浏览器再访问其他的环境就会出现502

浏览器访问所有配置的环境应该是正常的

1.共两组环境。其中2个real server分别配置一个到两个不同的upstream,tengine使用两个端口,比如8080,8090反向代理这两个upstream。 2.那么应该访问的地址分别为ip:8080,ip:8090 3.在浏览器访问其中一个环境后,再访问另一个则出现502 4.实际测试添加contextpath不影响测试结果 5.日志报错:no live upstream while connecting to upstream 6.另一个环境使用隐身窗口或者换一个浏览器可以正常访问,或者把proxy_pass代理的upstream更换为实际的ip:port也是正常访问的。 7.所以有可能是跟负载均衡的sticky_session有一些冲突存在?

  1. If applicable, add nginx debug log doc. 2.使用默认参数编译安装nginx,复制tengine的配置文件过去,只取消掉sticky_session配置,浏览器访问无问题 3.或者取消掉tengine配置文件upstream段中的session_sticky也无问题
Ⅵ. Environment:
  • Tengine version (use sbin/nginx -V): 2.3.2
  • OS (e.g. from /etc/os-release): centos6.8
  • Kernel (e.g. uname -a):
  • Others:

回答

7

再次排查了一下,应该是cookie设置的作用域domain或者path路径的问题。 猜测是这样的: 先打开的环境有了一个cookie,但是默认的domain和path为空,导致后面打开的环境会使用这个cookie,而在这个环境中tengine根本就没有cookie的记录,于是就会提示upstream上层服务器没有存活。

猜测解决办法: 对于ip:port的访问是否能够设置session_sticky path=/aaa doamin=/aaa.test,这样路径和domain实际并不存在,不知道对访问环境是否有影响。

5

第二次请求的时候由于路由到另一个 Upstream , 而该 Upstream 中对应的 server 里面记录的session id 和另一个 Upstream 里面对应的session id不一样,所以导致不能匹配到对应的 server。一方面可以设置容灾策略(如,fallback选项),另一方面可以设置cookie作用域及路径,相关设置可以参考这个文档 http://tengine.taobao.org/document_cn/http_upstream_session_sticky_cn.html