关于 nginx 代理 websocket 的原理

256 天前
 hjcpnr
有几个问题不太明白,有没有大佬解答一下

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

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

综上,握手是 client-ng 和 ng-server 之间分别进行的。
lsk569937453
256 天前
1.client 和 nginx 通信,nginx 再和 server 通信
2.是的。
aladdinding
255 天前
http connect , 中间想传啥传啥
root71370
255 天前
中转站!

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

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

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

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

© 2021 V2EX