首页 > 解决方案 > 有没有办法让 nginx 终止 websocket 连接并只将套接字流传递给服务器?

问题描述

基本上我要做的是在客户端建立一个安全的 websocket 连接,通过 nginx 来终止 tls,而不是仅仅将 websocket 连接代理到服务器,让 nginx 处理 websocket 升级,然后将套接字流数据发送到 tcp 服务器或 unix 域套接字。

现有的 nginx 模块和配置有可能吗?

proxy_pass 可以通过 unix 域套接字连接到服务器

proxy_pass http://unix:/tmp/backend.socket:/uri/;

但是这意味着它仍然通过 unix 域套接字说 http 并且服务器负责处理 websocket 升级。我正在尝试让 nginx 进行升级,以便只有原始套接字流数据才能到达我的服务器。

有点像 proxy_pass 和 fastcgi_pass 之间的混合。

我是否必须修改其中一个模块才能使其成为可能,或者是否有某种方法可以将其配置为工作?

标签: nginxwebsocket

解决方案


所以我最终意识到代理只是代理而不解析协议。nginx 中没有内置任何东西(尽管 apache 中的 mod_ws 可能会这样做)可以实际处理 websockets 协议,nginx 代理功能只是将流转发到后端服务器。我正在为此研究另一种方法,因为希望让网络服务器完成繁重的工作并不容易。


推荐阅读