2016-07-09 15 views
1

Ich versuche, eine Express-socket.io-angular.js Anwendung auf einer Himbeere meine bei mir zu Hause zu betreiben.Running socket.io hinter Nginx an einer Sublokation

Express und socket.io werden auf Port 3001 ausgeführt. Der Zugriff auf die Anwendung unter http://[IP]:3001 funktioniert einwandfrei. Ich möchte auf die Anwendung unter http://[IP]/ttt zugreifen.

ich konfiguriert nginx wie folgt aus:

location /ttt/ { 
    proxy_pass http://localhost:3001/; 
} 

Auf dem Server ich diese Zeilen Code auszuführen:

var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 

... 

app.use(express.static(__dirname + '/public')); 
app.use('/node_modules', express.static(__dirname + '/node_modules')); 

... 

var io = require('socket.io')(http, {path: '/ttt/socket.io'}); 

... 

http.listen(3001, function() { 
    console.log('Listening on port 3001'); 
}); 

und auf der Client-I umfassen wie folgt Socket.io:

<script src="socket.io/socket.io.js"></script> 

und verbinden wie folgt:

socket: Socket = io.connect({path: "/ttt/socket.io"}); 

Das Problem:

ich alle Ressourcen (html, css, js inkl. socket.io.js), aber im Browserlog erhalte ich Fehlermeldungen, dass es nicht möglich war, http://[IP]/socket.io/?EIO=3&transport=polling&t=LNGvDUd zu erhalten, wobei t sich häufig ändert.

Es meldet Status 404, es ist offensichtlich, weil Nginx nicht an /socket.io reagiert.

Vielen Dank im Voraus!


Kombinierte Ergebnisse mit jfriend00:

Die Arbeits Setup sieht wie folgt aus:

nginx (weitere Informationen über die korrekte Konfiguration here gefunden):

location /ttt/ { 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_http_version 1.1; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $host; 
     proxy_pass http://localhost:3001/; 
    } 

Express:

var io = require('socket.io')(http); 

Client (Typoskript):

socket: Socket = io({path: "/ttt/socket.io"}); 

Antwort

0

Wenn ich Ihre Proxy-Konfiguration richtig zu verstehen, ist es die /ttt vom Weg abzustreifen, bevor die Weiterleitung auf Port 3001. Als solche Ihre socket.io Initialisierung wird ist nicht korrekt auf dem Server.

ändern diese:

var io = require('socket.io')(http, {path: '/ttt/socket.io'}); 

dazu:

var io = require('socket.io')(http); 

EDIT:

Und, stellen Sie sicher, dass Ihre Client-Datei, die in den Browser geladen ist eigentlich die letzte bearbeitete Client-Datei . Sie können es mit View/Source im Browser überprüfen, um genau zu sehen, welche Datei Sie gerade ausführen.

+0

Vielen Dank für Ihre schnelle Antwort! Ja, Sie haben mein Proxy-Setup richtig verstanden. Ich habe das versucht, aber der Browser versucht immer noch, /socket.io/... unter der falschen URL zu bekommen. – Stefan

+0

Ich weiß nicht, was diese Syntax in Ihrem Client-Code bedeutet: 'socket: Socket = io.connect ({path : "/ttt/socket.io"}); '. Es funktioniert bei mir damit im Client: 'socket = io ({pfad:" /ttt/socket.io "});' und ' '. – jfriend00

+0

Sorry, aber ich bekomme immer noch den 404-Fehler auf http: // [IP] /socket.io/?EIO=3&transport=polling&t=LNGvDUd Welchen Teil der Syntax meinst du? – Stefan

Verwandte Themen