我正在尝试设置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上进行监听,或者在监听器中发生了一些应用程序错误。