首页 > 解决方案 > 亚马逊应用程序负载均衡器上托管的套接字连接的 400 错误请求

问题描述

背景

我正在使用kong admin连接到kong api 网关

我正在使用kong 管理员提供的docker 文件。

问题

docker 容器在我的本地机器上运行良好,并且 UI 已按预期加载

在此处输入图像描述

但是,当我尝试访问托管在 amazon ecs 上的同一个 docker 时,它不起作用。它只是一直显示加载程序。

在此处输入图像描述

基础设施

docker 容器托管在 amazon 负载均衡器后面,并正在侦听端口 80。端口 80 上的流量然后转发到 docker 容器内的端口 1337

负载均衡器 url - http://staging.host.internal

错误

要求

Request URL: http://staging.host.internal/socket.io/?__sails_io_sdk_version=0.13.8&__sails_io_sdk_platform=browser&__sails_io_sdk_language=javascript&EIO=3&transport=polling&t=MTvxlu9&sid=lH69C1E52B3aGVIwAANl
Request Method: GET
Status Code: 400 Bad Request
Remote Address: xx.xx.xx.xx:xx
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Type: application/json
Date: Tue, 04 Dec 2018 15:56:05 GMT
Transfer-Encoding: chunked
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Connection: keep-alive
Cookie: io=lH69C1E52B3aGVIwAANl

回复

{"code":1,"message":"Session ID unknown"}

我在控制台中遇到错误

WebSocket connection to 'ws://staging.host.internal/socket.io/?__sails_io_sdk_version=0.13.8&__sails_io_sdk_platform=browser&__sails_io_sdk_language=javascript&EIO=3&transport=websocket&sid=j-RcLmqGi5bZoQ4YAAPF' failed: WebSocket is closed before the connection is established.

DEBUG=socket.io.*的服务器日志上,我得到以下日志

Tue, 04 Dec 2018 15:07:26 GMT socket.io-parser encoding packet
{
    "type": 0,
    "nsp": "/"
}

任何人都可以指出正确的方向来调试它。我没有起点。

标签: amazon-web-servicesdockersocket.iosails.jsamazon-alb

解决方案


我必须在 ALB 上启用粘性会话,因为我在负载均衡器后面托管了多个 Docker 容器

问题是,在没有粘性会话的情况下,我在一台服务器上登录,我获得了 websocket 会话 ID,并且读取请求在单独的服务器上进行,因此我得到了连续的成功和失败响应,因为 serges 是负载平衡的。

https://www.looklinux.com/enable-sticky-session-application-load-balancer-aws/


推荐阅读