2017-08-17 2 views
0

Vor allem, ja ich weiß, es gibt viele verwandte Frage zu SO für ähnliche Probleme. Ich habe fast alle durchgemacht, bevor ich gefragt habe.socket.io.js nicht in der Produktionsinstanz

Ich habe ein sehr seltsames Problem, wo, socket.io.js Datei nicht von Server auf Produktion Instanz bedient wird.

Genau derselbe Code funktioniert auf meiner Entwicklungsinstanz. Der einzige Unterschied zwischen der Entwicklung und der Production-Instanz besteht darin, dass die Production-Instanz mit dem nginx-Proxy läuft, aber ich denke nicht, dass dies das Problem sein sollte.

Als ich https://my-host-name.com/socket.io/socket.io.js

ich Fehler "404 Not Found"

Nginx Protokoll gibt diesen Fehler zuzugreifen versuchen:

2017/08/17 12:01:28 [error] 30437#0: *2298619 open() "/data/api/current/socket.io/socket.io.js" failed (2: No such file or directory), client: 10.xxx.x.xx, server: , request: "GET /socket.io/socket.io.js HTTP/1.1", host: ""

Ich bin völlig ahnungslos, was los ist hier falsch. Kann mir bitte jemand helfen?

Hier ist meine Buchse confiiguration auf app.js Datei:

var server = https.createServer(app.get("httpsOptions"), app); 
var socket = require('socket.io'); 
var io = socket.listen(server); 
server.listen(app.get('port'), function(){ 
    logger.info("Starting the express app..."); 
    logger.info("Express server listening on port " + app.get('port')); 
}); 
require('./routes/sockets/base')(io); // separating the socket.io related code in separate file 

Ich kann mein node_modules bereits socket.io, socket.io-Adapter, socket.io-Client und socket.io-Parser sehen

+0

Sie benötigen die Anfrage für socket.io.js, um durch NGINX zu Ihrem Express-Server (anstatt NGINX versuchen, es direkt zu Server) zu bekommen und Sie müssen den Pfad mit Ihrem zu Ihrem Express-Server zu bekommen sei '/ socket.io/socket.io.js'. Dies scheint ein NGINX-Konfigurationsproblem zu sein, und es sieht so aus, als ob es wahrscheinlich eine Art von NGINX-Konfiguration gibt, die den Pfad '/ data/api/current' ebenfalls hinzufügt. – jfriend00

+0

Ich versuchte, die nginx conf, um zu sehen, und fügte hinzu, es folgende Zeile: alias /socket.io/ {alias /data/api/current/node/node_modules/socket.io-client/dist/} Jetzt kann ich Weitere Informationen finden Sie in der Datei socket.io.js, die über diesen Link bereitgestellt wird: https: //my-host-name.com/socket.io/socket.io.js Aber alle Abfragen sind mit 403 verbotenem Fehler fehlgeschlagen: Hier sind nginx log: Verzeichnis-Index von "/data/api/current/node/node_modules/socket.io-client/dist//" ist verboten, – undefined

Antwort

1

The only difference between development annd Production instance is that, produciton instance runs using nginx proxy but I do not think that should be the problem. Das ist eine sehr große Annahme und eine falsche auch.

Sie sollten die Entwicklungsumgebung mit einem Nginx-Proxy festlegen und dann in die Produktion wechseln. Alle statischen Dateien muss Zugriff der nginx Container, damit es diese statische Dateien trennen kann und sie gehen nicht auf Ihre NodeJS Code

Auch würden Sie unter Richtlinien müssen in Ihrem nginx Config

proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection "upgrade"; 
proxy_http_version 1.1; 

Für weitere Details siehe https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

+0

OK..also habe ich obige Zeilen zu meinem nginx hinzugefügt, und hier ist wie es sieht so aus: https://pastebin.com/raw/FJAm6fDT Aber jetzt bekomme ich Fehler: WebSocket-Verbindung zu 'wss: /my-host-name/socket.io/? EIO = 3 & transport = Websocket & sid = Ni1NmPNYgC8JuYHvAADa' fehlgeschlagen: WebSocket wird geschlossen, bevor die Verbindung hergestellt wird. Ich glaube, ich bin jetzt ganz in der Nähe, aber nicht sicher, was dieses Problem verursacht sowohl nginx die Protokolle – undefined

+0

zu prüfen und NodeJS Seite –

+0

https://pastebin.com/raw/eumXXN37 I Timeout in nginx Protokoll zu sehen, und Mehrere Benutzer verbunden Nachricht in Knoten js Protokoll. – undefined