我正在尝试从 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/