Amazon web services 在aws中使用golang创建websocket

Amazon web services 在aws中使用golang创建websocket,amazon-web-services,go,https,gorilla,Amazon Web Services,Go,Https,Gorilla,我正在尝试使用golang with gorilla on aws(没有docker)和负载平衡器创建WebSocket,我有一个连接到负载平衡器的证书 我设法使代码与http一起工作,但当我尝试通过https使用代码时,它不起作用 我做错了什么? 从http移动到https时,我将客户端请求更改为wss而不是ws,并将证书添加到负载平衡器。 这是我的密码。 这是我的主要任务 http.HandleFunc("/wss", serveWs) fmt.Printf("Listening

我正在尝试使用golang with gorilla on aws(没有docker)和负载平衡器创建WebSocket,我有一个连接到负载平衡器的证书

我设法使代码与http一起工作,但当我尝试通过https使用代码时,它不起作用

我做错了什么? 从http移动到https时,我将客户端请求更改为wss而不是ws,并将证书添加到负载平衡器。 这是我的密码。 这是我的主要任务

    http.HandleFunc("/wss", serveWs)

fmt.Printf("Listening on port %s\n\n", port)


if err := http.ListenAndServe(":"+port, nil); err != nil {
    fmt.Printf(err.Error())
}
以下是serveWs:

func serveWs(w http.ResponseWriter, r *http.Request) {
upgrader.CheckOrigin = func(r *http.Request) bool {
    // allow all connections by default
    return true
}

ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
    fmt.Println(err)
    if _, ok := err.(websocket.HandshakeError); !ok {
        log.Println(err)
    }
    return
}

var lastMod time.Time

if n, err := strconv.ParseInt(r.FormValue("lastMod"), 16, 64); err != nil {
    lastMod = time.Unix(0, n)
}

go writer(ws, lastMod, w, r)
reader(ws)
}

请求如下:

 var conn = new WebSocket("wss://https://www.weldpad.com/wss?" 
当我从客户端发送请求时,会出现以下错误:

失败:WebSocket握手期间出错:意外响应代码:400

查看服务器日志,我明白了

“找不到具有标记“websocket”的升级标头”

这是我的负载平衡器配置:


我认为应该是
wss://www.weldpad.com/wss?
wss://https://www.weldpad.com/wss?

我也尝试过,结果是:wsconnect.html WebSocket连接到'wss://www.weldpad.com/wss'failed:WebSocket握手时出错:意外响应代码:400这是一个更好的错误消息它正在从服务器得到响应。现在您需要查看您的服务器,可能需要检查服务器日志,看看它为什么返回400代码。查看日志,我发现“websocket:找不到带有标记“websocket”的升级头”,我正在查看它。找到它后,我丢失了tcp的负载平衡器映射,映射是SSL到tcp,一旦启用它,一切都正常了,谢谢马克,你的评论让我关注这个问题。