【问题标题】:Meteor gets WebSocket error with Apache ProxyMeteor 使用 Apache 代理获取 WebSocket 错误
【发布时间】:2016-04-23 17:55:13
【问题描述】:

我有一个通过 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>

【问题讨论】:

    标签: node.js apache meteor proxy ddp


    【解决方案1】:

    您的应用正在运行,因为 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>
    

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      相关资源
      最近更新 更多