2016-04-23 16 views
0

Ich habe eine Meteor App, die ich über einen Apache-Proxy zugreifen. Die App scheint zu funktionieren, aber ich sehe einen Fehler in der Chrome-Konsole. Ich schätze, es funktioniert, weil es einige weniger als ideale Fallback gibt. Es wird die Fehlermeldung:Meteor ruft WebSocket Fehler mit Apache Proxy

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

Ich habe viele Lösungen für dieses Problem zu lesen, die sehr weit verbreitet zu sein scheint (und versuchte, nicht wenige), aber sie sind oft zu komplexen gebunden, dass die Lösungen unbrauchbar in meinem sehr machen einfache Einrichtung. Einfach gesagt, wie konfiguriere ich meinen Apache-Proxy, um Meteor zu bedienen und den WebSocket ddp-client-Fehler zu vermeiden.

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

    ???? 

</VirtualHost> 

Antwort

0

Ihre App funktioniert, weil Meteor Fallbacks zu XHR lange Abfragen mit SockJS hinter den Kulissen.

WebSocket Proxying zu aktivieren, wenn Sie 2.4.5 verwenden Apache und höher, können Sie versuchen, mod_proxy und mod_proxy_wstunnel mit (Ihre Meteor-App auf Port 3000 lauscht vorausgesetzt):

<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> 

ohne Verwendung der genannten Module , könnten Sie Folgendes versuchen:

<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>