我们有两个客户端,一个是javascript,一个是C++。 C++ 使用 libwebsockets。他们都尝试通过安全的 websockets (wss) 通过端口 7000 连接到我们的 websocket 服务器,它位于 NGINX 服务器后面。当 javascript 客户端连接时,连接成功,在 NGINX 7000 端口日志中,显示:
[04/May/2018:12:25:30 +0000] "GET/HTTP/1.1"101 0 "-""Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 ( KHTML,如 Gecko)Chrome/Safari/537.36"
但是,当尝试与 C++ 客户端连接时,连接失败并显示日志
[04/May/2018:10:59:40 +0000] "GET/HTTP/1.1"400 5 "-""-"
为什么在第二种情况下抛出 400 而不是 101?我们不确定如何调试它。这是我们在websocket客户端中使用的
ws->init("wss://echo.websocket.org:7000", nullptr, "你的CA根文件路径");
客户端只是说连接失败
。我们尝试使用 wireshark 检查数据并在 NGINX 服务器中启用更多日志,但我们无法弄清楚。它是关于什么的?会不会是因为 SSL/TLS 版本不匹配?
最佳答案
原来客户端的库实际上并没有在请求中包含端口号,即使它包含在连接 URL 中也是如此。因此,要么配置 NGINX 来处理这种特定情况,要么让库在请求中包含端口,就可以解决这个问题。
关于ssl - NGINX:两个不同的 websocket 连接的不同日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50175132/