Node.js 我的PeerJS服务器返回一个ID,但随后我收到404的后续请求,请求'/peerjs';

Node.js 我的PeerJS服务器返回一个ID,但随后我收到404的后续请求,请求'/peerjs';,node.js,webrtc,http-status-code-404,reverse-proxy,peerjs,Node.js,Webrtc,Http Status Code 404,Reverse Proxy,Peerjs,我正在开发一个WebRTC视频会议/远程性能站点(构建在AWS“Lightsail”VM上),我遇到了一个关于PeerJS的非常奇怪的问题 我通过Apache2反向代理在3001端口上托管我自己的PeerJS服务器。反向代理似乎工作正常,因为当peerjs.min.js点击'/peerjs/id'时,它会返回预期的id 但是,从peerjs.min.js文件内部对'/peerjs'的后续调用会立即返回404错误 (我应该注意,如果我只使用默认的PeerJS服务器,我的站点工作正常。) 因此,例如

我正在开发一个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--3001端口--proxied true

它的答复是:

已在以下位置启动PeerServer,端口:3001,路径:/(v.0.6.1)

下面是apache的相关vhosts配置:

<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>
我认为解决方案是只为对等服务器启动另一个VM,但这整件事让我很烦。它应该有用,不是吗

无论如何,在我写这篇文章的时候,这个网站目前是在线的,我会让它一直运行,直到你们中的一些人看过它并提供一些反馈。您可以访问:

https://www.improv-stage.com/stackoverflow

谢谢你能提供的任何想法


Diz通过将这行代码添加到apache2,我解决了这个问题:

     RewriteCond %{HTTP:Connection} Upgrade [NC]
     RewriteRule /(.*) ws://localhost:9500/$1 [P,L]
请注意
9500
是peerServer在其上运行的特定端口

端口3000上有express和socket.io,端口9500上有peerServer

这帮了大忙


我认为这非常依赖于web服务器配置。

通过将这行代码添加到apache2,我解决了这个问题:

     RewriteCond %{HTTP:Connection} Upgrade [NC]
     RewriteRule /(.*) ws://localhost:9500/$1 [P,L]
请注意
9500
是peerServer在其上运行的特定端口

端口3000上有express和socket.io,端口9500上有peerServer

这帮了大忙


我认为这非常依赖于web服务器的配置。

嘿,迪兹,你能检查一下你的Apache是否配置了wss连接吗?我在玩游戏,我可以看到当你的站点试图建立wss连接时失败了<代码>WebSocket连接到'wss://peer.improv-stage.com/peerjs?key=peerjs&id=b844c034-a8db-47c2-ae8d-b9e096bef4cc&token=0454agryh446'失败:WebSocket握手期间出错:意外响应代码:404当我尝试连接到PeerServer的本地实例时,一切正常。我以为WSS只是通过TLS/SSL/443处理的,但我肯定会检查一下,看看是否还有更多。我能找到的唯一可以更改的配置项是启用
mod\u proxy\u wstunel
,但它没有任何区别。(我尝试更改vhosts文件以适应更改,这只会让事情变得更糟。)如果您有一个我可以参考的示例配置,那将非常有用。我放弃了这一点,并建立了一个专门的回合服务器。初始测试似乎表明这解决了我的连接问题。嘿,迪兹,你能检查一下你的Apache是否配置为wss连接吗?我在玩游戏,我可以看到当你的站点试图建立wss连接时失败了<代码>WebSocket连接到'wss://peer.improv-stage.com/peerjs?key=peerjs&id=b844c034-a8db-47c2-ae8d-b9e096bef4cc&token=0454agryh446'失败:WebSocket握手期间出错:意外响应代码:404当我尝试连接到PeerServer的本地实例时,一切正常。我以为WSS只是通过TLS/SSL/443处理的,但我肯定会检查一下,看看是否还有更多。我能找到的唯一可以更改的配置项是启用
mod\u proxy\u wstunel
,但它没有任何区别。(我尝试更改vhosts文件以适应更改,这只会让事情变得更糟。)如果您有一个我可以参考的示例配置,那将非常有用。我放弃了这一点,并建立了一个专门的回合服务器。初步测试似乎表明,这解决了我的连接问题。嘿!谢谢我会试试看,如果有用的话,告诉你。嘿!谢谢我会试试看,如果有用的话,会告诉你的。