【发布时间】:2021-03-31 09:18:50
【问题描述】:
我正在开发一个 WebRTC 视频会议/远程性能站点(基于 AWS“Lightsail”VM 构建),我遇到了 PeerJS 的一个非常奇怪的问题。
我通过 Apache2 反向代理在端口 3001 上托管我自己的 PeerJS 服务器。反向代理似乎工作正常,因为当peerjs.min.js 命中'/peerjs/id' 时,它会按预期返回一个 ID。
但是,从 peerjs.min.js 文件内部对 '/peerjs' 的后续调用会立即返回 404 错误。
(我应该注意,如果我只使用默认的 PeerJS 服务器,我的网站可以正常工作。)
因此,例如,此请求按预期工作:
https://peer.improv-stage.com/peerjs/id
虽然此后续请求(再次从 peerjs.min.js 内部启动)会导致 404 错误。
wss://peer.improv-stage.com/peerjs?key=peerjs&id=bd261271-09f7-44a3-a07e-3d3364c1989f&token=40sh9uviwb
(id 和 token,这里的参数来自页面的一次调用,当然每次访问都会改变。)
我很确定这是我的服务器设置有问题,所以,这里是相关信息...
我正在htdocs 目录中使用以下命令调用对等服务器:
peerjs --port 3001 --proxied true
它会回复:
Started PeerServer on ::, port: 3001, path: / (v. 0.6.1)
这是来自 apache 的相关虚拟主机配置:
<VirtualHost *:443>
ServerName peer.improv-stage.com
DocumentRoot "/opt/bitnami/apache/htdocs"
ProxyPass / http://127.0.0.1:3001/
ProxyPassReverse / http://127.0.0.1:3001/
SSLEngine on
SSLCertificateFile "/opt/bitnami/letsencrypt/certificates/improv-stage.com.crt"
SSLCertificateKeyFile "/opt/bitnami/letsencrypt/certificates/improv-stage.com.key"
<Directory "/opt/bitnami/apache/htdocs">
Options -Indexes +FollowSymLinks -MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
要注意的另一件事是,它与站点“即兴舞台”站点本身位于同一台服务器上。即兴舞台站点是一个 NodeJS 应用程序,它调用对等服务器(在客户端),具有以下内容:
var myPeer = new Peer(undefined, {
host: 'peer.improv-stage.com',
port: 443,
secure: true,
path: "/",
debug: 3
})
我认为解决方案是为对等服务器启动另一个虚拟机,但这整件事让我很烦恼。它应该有效,不是吗?
无论如何,在我撰写本文时,该网站目前处于运行状态,我将让它继续运行,直到至少有几个人看过它并提供一些反馈。您可以通过以下方式联系它:
https://www.improv-stage.com/stackoverflow
感谢您提供的任何想法!
迪兹
【问题讨论】:
-
嘿,Diz,你能检查一下你的 Apache 是否配置了 wss 连接吗?我在玩,我可以看到您的站点何时尝试建立 wss 连接失败。
WebSocket connection to 'wss://peer.improv-stage.com/peerjs?key=peerjs&id=b844c034-a8db-47c2-ae8d-b9e096bef4cc&token=0454agryh446' failed: Error during WebSocket handshake: Unexpected response code: 404当我尝试连接到 PeerServer 的本地实例时,一切正常。 -
我以为 WSS 只是通过 TLS/SSL/443 处理的,但我肯定会检查一下,看看是否还有更多。
-
我发现唯一可以更改的配置项是启用
mod_proxy_wstunnel,但它根本没有任何区别。 (我尝试更改我的 vhosts 文件以适应更改,但这只会让事情变得更糟。)如果您有我可以参考的示例配置,那将很有帮助。 -
好吧。我对此认输,并建立了一个专用的 TURN 服务器。初步测试似乎表明这解决了我的连接问题。
标签: node.js webrtc http-status-code-404 reverse-proxy peerjs