V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hjcpnr
V2EX  ›  程序员

关于 nginx 代理 websocket 的原理

  •  
  •   hjcpnr · 2023-10-15 19:37:47 +08:00 · 2177 次点击
    这是一个创建于 389 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有几个问题不太明白,有没有大佬解答一下

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

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

    综上,握手是 client-ng 和 ng-server 之间分别进行的。
    lsk569937453
        4
    lsk569937453  
       2023-10-16 08:23:42 +08:00
    1.client 和 nginx 通信,nginx 再和 server 通信
    2.是的。
    aladdinding
        5
    aladdinding  
       2023-10-16 10:36:33 +08:00
    http connect , 中间想传啥传啥
    root71370
        6
    root71370  
       2023-10-16 10:45:46 +08:00
    中转站!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:44 · PVG 02:44 · LAX 10:44 · JFK 13:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.