javascript - Ubuntu 上 Apache 服务器上的 Proxypass 套接字 io

标签 javascript node.js apache ubuntu socket.io

我正在尝试从 official sample 部署 Node js socket.io 项目在我的服务器中(带有 Apache 2 服务器的 Ubuntu)

这是我在 /etc/apache2/sites-available/000-default.conf 中的代理设置

ProxyPass /ChatSocket http://localhost:3000
ProxyPass /socket.io http://localhost:3000/socket.io
ProxyPass /socket.io ws://localhost:3000/socket.io

但是当我尝试通过 dns 访问我的网络服务器时,我无法连接到套接字。

我的浏览器控制台出现了这个错误

WebSocket connection to 'ws://example.com/socket.io/?EIO=3&transport=websocket&sid=HgU6py-fCl1GFrdsAAAK' failed: Error during WebSocket handshake: Unexpected response code: 400

可能是因为 url http://example.com/socket.io与 ws://example.com/socket.io 冲突

如何使用具有相同 url 的 websocket 和 http?因为看起来 http://example.com/socket.io ws://example.com/socket.io 由 socket.io 从这一行生成

var server = require('http').createServer(app);
var io = require('socket.io')(server);

是否有任何其他解决方法来解决这个问题,或者在没有 proxypass 的情况下在我的 apache 服务器中部署我的 socket.io Node js 应用程序?

最佳答案

没关系,我设法让它与 RewriteEngine 一起用于网络套接字 (ws://)

这是我在 /etc/apache2/sites-available 中的 000-default.conf

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io          [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3000/%1        [P,L]

ProxyPass /ChatSocket http://localhost:3000
ProxyPassReverse /ChatSocket http://localhost:3000
ProxyPass /socket.io http://localhost:3000/socket.io
ProxyPassReverse /socket.io http://localhost:3000/socket.io

关于javascript - Ubuntu 上 Apache 服务器上的 Proxypass 套接字 io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46726158/

相关文章:

javascript - 如何查看 JavaScript 数组的内容,包括 Mirth Connect 中 channel 源部分的对象

javascript - 重复的表单字段输入

javascript - 使用 HTML 或 Javascript 替换网页上的文本

javascript - 在运行时重新加载模块

node.js - 为什么在 sequelize 的 createTable 函数中忽略了 allowNull (false) 选项

javascript - 在数组(或对象)上迭代异步的最聪明/最干净的方法是什么?

django - 在 Apache 上为 Django 应用程序配置 SSL 证书 (mod_wsgi)

python - Ubuntu 上的 Django + Apache 部署

javascript - 在元素中的选定文本周围添加标签

java - 如何使用运行apache的eclipse连接到mysql