关于 nginx 代理 websocket 的原理

2023-10-15 19:37:47 +08:00
 hjcpnr
有几个问题不太明白,有没有大佬解答一下

1.nginx 代理 websocket 请求时,握手阶段是 nginx 来完成的,还是由后端 ws 服务器来完成的?

2.nginx 是不是需要跟后端 ws 也建立一个 websocket 连接:ws 客户端 <-> nginx <-> 后端,将客户端和后端两个连接关联起来,然后透传客户端的 tcp 流量到后端?
2226 次点击
所在节点    程序员
6 条回复
ysc3839
2023-10-15 20:00:10 +08:00
握手当然是客户端和 nginx 和后端服务器都会进行的。握手其实就是最开始那个 http 请求,客户端发请求给 nginx ,nginx 发请求给后端,后端返回给 nginx ,nginx 返回给客户端。
nginx 是要和后端建立连接,但 nginx 不需要解析其中的 WebSocket 协议数据。根据 http 协议,开头的请求和响应已经升级了协议,后续 nginx 只需要原样传递 TCP 通道的数据即可,就类似 http 代理的 CONNECT 功能。
julyclyde
2023-10-15 21:33:23 +08:00
websocket 的开头就是个 http
难道这么大量写 websocket 的人都不知道这事??
flyingghost
2023-10-16 00:17:08 +08:00
反证法:
握手四要素:源 IP 、源端口、目标 IP 、目标端口。
client:什么?目标 IP 是个局域网地址?连不上,卒。
server:什么?源 IP 是个外网 IP ?没有外网出口,卒。

综上,握手是 client-ng 和 ng-server 之间分别进行的。
lsk569937453
2023-10-16 08:23:42 +08:00
1.client 和 nginx 通信,nginx 再和 server 通信
2.是的。
aladdinding
2023-10-16 10:36:33 +08:00
http connect , 中间想传啥传啥
root71370
2023-10-16 10:45:46 +08:00
中转站!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX