使用 apache 的 Meteor websocket 连接失败

使用 apache 的 Meteor websocket 连接失败

我使用 MeteorUp 将 Meteor 应用程序部署到 DO Droplet。我为该网站配置了 apache 的虚拟主机,如下所示:

<VirtualHost *:80>
    ServerName filipe-garcia.com
    ServerAlias www.filipe-garcia.com

    ServerAdmin [email protected]
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/sockjs/           [NC]
    RewriteCond %{QUERY_STRING} transport=websocket [NC]
    RewriteRule /sockjs/ ws://localhost:3000/$1     [P,L]

    ProxyPreserveHost On
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</VirtualHost>

但我仍然得到一个

WebSocket 与 'ws://filipe-garcia.com/sockjs/622/9hwpvs81/websocket' 的连接失败:WebSocket 握手期间出错:意外响应代码:400

我的控制台上出现错误。我在 Google 上搜索了这个问题,找到了许多解决方案(大部分是相同 VHost 的变体),但均未成功。

除此错误外,其他一切似乎都运行良好(我还没有感觉到任何影响,因为这个应用程序还不依赖于 websockets)。

我不确定该如何修复这个问题。我在 Ubuntu 32 位上运行 Apache 2.4.7,并且启用了 proxy、proxy_connect、proxy_http、proxy_wstunnel。

编辑:这一定与代理的配置方式有关,因为如果我将浏览器直接指向正在运行的机器和端口,就不会发生此错误。

作为一个小奖励问题,通过使用 nodejs 服务器,我应该删除文件的 DocumentRoot 行还是将其保留在那里?

谢谢。

答案1

对我来说..只需将以下内容添加到..sites-enabled..(ubuntu+apache) 即可:

ProxyRequests off
   <Proxy *>
    Order deny,allow
    Allow from all
   </Proxy>

   <Location />
    ProxyPass http://localhost:3000/
    ProxyPassReverse http://localhost:3000/
   </Location>

确保添加到 sites-enabled 而不是 sites-available

相关内容