有没有办法让nginx终止websocket连接并只将套接字流传递给服务器?

有没有办法让nginx终止websocket连接并只将套接字流传递给服务器?,nginx,websocket,Nginx,Websocket,基本上,我要做的是在客户端建立一个安全的websocket连接,通过nginx,nginx将终止tls,而不是将websocket连接代理到服务器,让nginx处理websocket升级,并将套接字流数据发送到tcp服务器或unix域套接字 对于现有的nginx模块和配置,这可能吗 proxy_pass可以通过unix域套接字连接到服务器 proxy\u passhttp://unix:/tmp/backend.socket:/uri/; 但这意味着它仍然通过unix域套接字与http通信,服务

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

对于现有的nginx模块和配置,这可能吗

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

proxy\u passhttp://unix:/tmp/backend.socket:/uri/;

但这意味着它仍然通过unix域套接字与http通信,服务器负责处理websocket升级。我正试图让nginx进行升级,这样只有原始套接字流数据才能到达我的服务器

有点像代理通行证和快速CGI通行证的混合


我是否必须修改这些模块中的一个以使之成为可能,或者是否有某种方式来配置它以使其工作?

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

您能使用lua编写脚本吗?考虑检查:现在所有的选项都在桌面上,但Lua不是我的首选。不过我会看一看,谢谢。websocket协议很难进行简单的转换,因为websocket协议是面向pascket的,并且具有不同类型的数据包/帧,因此您总是需要更高级别的协议来通信数据包边界和类型,从而排除了使用简单的“透明”协议流连接,如TCP。不过,nginx可以做一些事情,而且它已经做到了:TLS处理,所以至少可以将这些工作转移到web服务器上。然而,nginx在转发套接字上说HTTP并不是真的——websocket协议最初看起来像HTTP,但事实并非如此。