
Nach dem Lesen mehrerer Artikel gelingt es mir immer noch nicht, meine socket.io-Kommunikation über einen Nginx-Proxy zum Laufen zu bringen.
Unten ist meine nginx
Konfiguration:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location ~* \.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
So ist mein node.js
Express-Server verkabelt:
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
Auf meiner lokalen Entwicklungsmaschine scheint alles einwandfrei zu funktionieren. Das heißt, ich sehe meine OnConnection-Protokollnachricht und die gesamte Kommunikation funktioniert auch gut.
In der Produktion erhält mein Browser jedoch alle gültigen Antworten, aber ich sehe keine OnConnection-Protokolle und die Kommunikation über den Socket funktioniert nicht.
Tab-Anfragen zum Chrome-Netzwerk (klicken, um das Bild in voller Größe zu öffnen)
Antwort1
Es könnte sein, dass Port 3000 durch eine Firewall auf Ihrem Produktionsserver blockiert ist. Sie können überprüfen, ob er geöffnet ist, indem Sie den folgenden Befehl von Ihrem lokalen Entwicklungscomputer aus ausführen
telnet <ip-address-of-your-production-server> 3000
Dadurch wird versucht, eine Verbindung zum Port 3000 auf dem Produktionsserver herzustellen. Wenn eine Zeitüberschreitung oder Ablehnung auftritt, ist der Port nicht geöffnet.