Meteor在Apache Proxy中出现WebSocket错误

时间:2016-04-23 17:55:13

标签: node.js apache meteor proxy ddp

我有一个通过Apache代理访问的Meteor应用程序。该应用似乎有效,但我在Chrome控制台中看到了错误。我猜它有效,因为有一些不太理想的后备。它得到错误:

ddp-client failed: Error during WebSocket handshake: Unexpected response code: 400

我已经阅读了很多这个问题的解决方案,这个解决方案看起来相当普遍(并尝试了很多),但它们常常与复杂性联系在一起,这使得解决方案在我非常简单的设置中无法使用。简单地说,我应该如何配置我的Apache代理来服务Meteor并避免WebSocket ddp-client错误。

<VirtualHost *:80>
    ServerName  my-domain.com

    ????

</VirtualHost>

1 个答案:

答案 0 :(得分:0)

你的应用程序正在运行,因为Meteor在幕后使用SockJS进行XHR长轮询后退。

要启用WebSocket代理,如果您使用的是Apache 2.4.5及更高版本,则可以尝试使用mod_proxymod_proxy_wstunnel(假设您的Meteor应用侦听端口3000):

<VirtualHost *:80>
    ServerName  my-domain.com

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

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

如果不使用上述模块,您可以尝试以下方法:

<VirtualHost *:80>
    ServerName  my-domain.com

    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
    RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
</VirtualHost>