用于ws://协议的NGINX代理设置

我正在尝试设置NGINX代理networking套接字stream量。 我正在NGINX(端口80)上运行一个网页,该端口具有来自8080端口的MJPEG馈送,并且还通过端口8090接收networking套接字stream量。我可以代理MJPEGstream,但不能代理networking套接字。 在我的网页,客户端JavaScript连接正常,没有代理使用这一行:

var conn = new WebSocket('ws://192.168.0.14:8989 / ws');

代理这个我试着设置下面的NGINXconfiguration:

#Proxy the Web Socket Traffic #---------------------------------------------- location /sock/ { proxy_pass ws://localhost:8989/ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } #Proxy the MJPEG Streamer feed #---------------------------------------------- location /mjpeg/ { proxy_pass http://localhost:8080/; } 

然后将客户端JavaScript更改为以下内容:

var conn = new WebSocket(' http://192.168.0.14/sock/ ');

但是当我重启NGINX的结果是:

作业nginx.service失败。 有关详细信息,请参阅“systemctl status nginx.service”和“journalctl -xn”。

如果我将代理服务器传递行更改为“proxy_pass http:// localhost:8989 / ws ;” 那么NGINX服务将成功重启,但是我可以重新build立networking套接字连接。

还有什么我需要configuration,以便NGINX将代理ws://地址? 是http://相当于是否升级协议? 如果后者是真的,那为什么不起作用呢?

我注意到在这篇文章中他们正在使用ws://在代理通过语句。 但它不适用于我NGINX:如何代理HTTPstream量到一个服务器和WSstream量到另一个?

没有可用的nginx文档提到ws://scheme可用于configuration。 难怪nginx无法启动,我敢打赌,这是它抱怨的configuration错误。

而且你确实拥有websockets代理的正确configuration 。 至于为什么它不起作用 – 仍然可以确定,这可能是由于一系列的原因:没有人真的在tcp / 8989上进行监听,或者在监听器中发生了一些应用程序错误。