2015-12-09 23 views
7

Stiamo cercando di eseguire un'applicazione Meteor su un server Debian dietro Nginx. L'applicazione è in esecuzione ma le richieste GET allo http://url/sockjs?info?cb=[random_string] restituiscono 502 Bad Gateway.Meteor, WebSocket, Nginx 502 Errore

La configurazione Nginx è impostato come così:

# this section is needed to proxy web-socket connections 
map $http_upgrade $connection_upgrade { 
    default upgrade; 
    ''  close; 
} 

upstream app_server { 
    server 127.0.0.1:3000; # for a web port socket (we'll use this first) 
    # server unix:/var/run/app/app.sock; 
} 

server { 
    listen  80; 
    server_name app_server.com; 

    charset utf-8; 
    client_max_body_size 75M; 

    access_log /var/log/nginx/app.access.log; 
    error_log /var/log/nginx/app.error.log; 

    location/{ 
     proxy_pass http://app_server; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection $connection_upgrade; 
     proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP 
     proxy_read_timeout 60s; 
     keepalive_timeout 65; 
     proxy_redirect off; 
     # the root path (/) MUST NOT be cached 
     if ($uri != '/') { 
      expires 30d; 
     } 
    } 
} 

Abbiamo provato diverse configurazioni e non poteva capire dove si trova il guasto. Soluzione allo Meteor WebSocket handshake error 400 with nginx non ha funzionato neanche.

Edit: provato seguente configurazione trovato alla recommended nginx configuration for meteor ed era ancora tornando 502.

Edit: L'applicazione funziona bene quando non ottenere immagini da Meteor CFS, che viene utilizzata per memorizzare le immagini caricate tramite un dashboard di amministrazione. Quando si caricano le immagini, un POST a dominio/sockjs/img_location/cb/xhr_send causa un errore 502.

+0

Forse prova a cambiare il proxy_pass in modo che punti all'istanza di meteor e rimuova l'app_server upstream? A meno che non sia necessario caricare il bilanciamento suppongo ... proxy_pass http: // localhost: 3000; Controlla anche questa risorsa: http://www.meteorpedia.com/read/nginx –

+0

@Sparticus ha provato quella configurazione in precedenza e i risultati sono gli stessi. – mrkre

+0

Ho notato che stai usando 'proxy_set_header Connection $ connection_upgrade;' ... hai provato invece 'proxy_set_header Connection $ http_connection; '? – Myst

risposta

2

Sei sicuro che il problema provenga davvero da NGINX e websocket?

  • In primo luogo si può provare wcat come websocket CLI per assicurare se i WebSockets stanno lavorando
  • È anche provare a eseguire l'applicazione in una console o guardare il log (debug/verbose a livello max) per verifica se non è presente un errore sottostante
+0

Ok, Websockets sta funzionando bene ma dopo un po 'di debug, ricevo questo: http://pastebin.com/qpAArbyM – mrkre

+0

sembra che tu abbia un errore con cfs. Ho trovato questo https://github.com/CollectionFS/Meteor-CollectionFS/issues/664 e se si guarda l'ultimo commento di Aldeed, sta suggerendo di installare un pacchetto chiamato cfs: [email protected] – samidarko

+0

Okay . Questo ha risolto il problema. Grazie per l'aiuto. Si prega di aggiornare la risposta e io accetterò. Sicuramente strappo! – mrkre

0

Come per la tua domanda di modifica, CFS utilizza un trasporto HTTP come livello di trasferimento dati sottostante.

Sfortunatamente, a seconda di come si ottiene CFS nello stack, si potrebbe finire con una versione vecchia e buggy delle sue dipendenze, ovvero cfs:http-methods, che a volte tenta di terminare una risposta già terminata, che poi si traduce come un criptico messaggio di errore.

Fortunatamente, il bug è stato risolto versione 0.0.30 in poi e per garantire che i carichi Meteor quella versione, come la dipendenza minimo, tutto quello che dovete fare è modificare il file si .meteor/packages e aggiungere quanto segue:

cfs:[email protected] 

Che garantirà qualsiasi versione uguale o maggiore di 0.0.30, che al momento è la più recente su Atmosphere (server dei pacchetti di Meteor).