javascript - WebSocket 握手期间出错 : 'Upgrade' header is missing (Apache 2. 4 + mod_proxy_wstunnel)

标签 javascript node.js apache websocket

我在服务器上运行 Apache 2.4,并设置了一个子域来处理我的 Node.JS Web 应用程序,该应用程序也使用 websockets。

我的 Apache 站点配置是:

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName ws.mysite.io
  ProxyPass /ws/ ws://1.2.3.5:6789/
  ProxyPassReverse /ws/ ws://1.2.3.5:6789/
  ProxyPass / http://1.2.3.5:6789/
  ProxyPassReverse / http://1.2.3.5:6789/
</VirtualHost> 

这样,当用户访问http://ws.mysite.io/时 - 他们会从我的node.js应用程序(使用express)获得html,并且html有一个javascript部分进行通信通过 ws.mysite.io/ws/ 上的 websocket 返回 Node.js 应用程序,该应用程序“隧道”到 ws://1.2.3.5:6789/

我遇到一种情况,在家庭 WiFi 上 - 一切正常。没问题。

在工作中,我们确实有防火墙、代理...但我不知道确切的限制或阻止,但当我打开http://ws.mysite.io/时会发生什么> 我进入 Chrome 控制台:

WebSocket connection to 'ws://ws.mysite.io/ws/' failed: Error during WebSocket handshake: 'Upgrade' header is missing

这是由于工作代理“切断”了某些东西吗?有没有机会建立一条“防弹”隧道来克服这样的问题?

最佳答案

据我所知,你不需要这一行:

ProxyPassReverse/ws/ws://1.2.3.5:6789/

关于javascript - WebSocket 握手期间出错 : 'Upgrade' header is missing (Apache 2. 4 + mod_proxy_wstunnel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39082684/

相关文章:

javascript - Vue.js - 属性或方法 "blah"未在实例上定义但在渲染期间被引用

javascript - 匿名访问如何跟踪?智威汤逊/ cookies / session ?

javascript - 是否可以在不自动折叠/伸展树(Splay Tree)的情况下替换具有数据树的表中的数据?

javascript - 如何在继续之前等待所有文件被读取并执行所有回调

java - org.apache.tiles.definition.NoSuchDefinitionException

javascript - 将新数据添加到空 Chart.js 图表不会正确呈现新数据

node.js - 如何使用 Firebase 管理 Node JS SDK 取消电子邮件与 Firebase 的链接

Javascript/网络包 : how to concatenate all json files in directory with a custom loop over files

php - 显示 mysql_real_escape_string() 之后实际传递到服务器的内容

php - 脚本头过早结束 : index. php,mod_fcgid:读取数据在 61 秒内超时