it-swarm.com.de

WebSocket Fehler beim Verbindungsaufbau: net :: ERR_CONNECTION_CLOSED

Ich erhalte diesen Fehler, wenn ich versuche, eine wss Verbindung mit meinem Server herzustellen:

WebSocket-Verbindung zu 'wss: // mydomain: 3000 /' fehlgeschlagen: Fehler beim Verbindungsaufbau: net :: ERR_CONNECTION_CLOSED

Ich habe derzeit eine Konfiguration für den virtuellen Apache2-Host eingerichtet, um auf Anforderungen an Port 443 und 80 zu warten:

<VirtualHost *:80>
        ServerName otherdomainname.co.uk
        ServerAlias www.otherdomainname.co.uk

        RewriteEngine On
        RewriteRule ^/(.*)$ /app/$1 [l,PT]

        JkMount /* worker2

</VirtualHost>

<VirtualHost _default_:443>
        ServerName otherdomainname.co.uk
        ServerAlias www.otherdomainname.co.uk

        RewriteEngine On
        RewriteRule ^/(.*)$ /app/$1 [l,PT]

        SSLEngine On
        SSLCertificateFile /etc/Apache2/ssl/Apache.crt
        SSLCertificateKeyFile /etc/Apache2/ssl/Apache.key

        <Location />
        SSLRequireSSL On
        SSLVerifyClient optional
        SSLVerifyDepth 1
        SSLOptions +StdEnvVars +StrictRequire
        </Location>

        JkMount /* worker2

</VirtualHost>

Wie Sie sehen, wird die Anforderung mit JkMount an Tomcat weitergeleitet, das die Webseite sowohl über HTTP als auch über HTTPS korrekt bedient.

Wenn ich die Site mit dem HTTP-Protokoll an Port 80 besuche, kann eine WebSocket-Verbindung mit dem Protokoll ws hergestellt werden.

Wenn ich die Site mit dem HTTPS-Protokoll an Port 443 besuche, wird die Site korrekt bedient, es wird jedoch keine WebSocket-Verbindung mit wss hergestellt.

Ich verwende das Modul "ws" node.js, um den WebSocket-Server bereitzustellen:

var WebSocketServer = require('ws').Server
  , wss = new WebSocketServer({ port: 3000 }),
  fs = require('fs');

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);

    ws.send(message);
  ws.send('something');
});

Warum kann ich mit dem Protokoll wss über https keine erfolgreiche Verbindung zum WebSocket-Server herstellen?

8
crm

Das Problem war, dass ich den WebSocket-Server nicht für https/wss konfiguriert habe.

Hier ist die sichere Version meines unsicheren WebSocket-Servers mit "ws" von node.js.

var WebSocketServer = require('ws').Server,
  fs = require('fs');


var cfg = {
        ssl: true,
        port: 3000,
        ssl_key: '/path/to/Apache.key',
        ssl_cert: '/path/to/Apache.crt'
    };

var httpServ = ( cfg.ssl ) ? require('https') : require('http');

var app      = null;

var processRequest = function( req, res ) {

    res.writeHead(200);
    res.end("All glory to WebSockets!\n");
};

if ( cfg.ssl ) {

    app = httpServ.createServer({

        // providing server with  SSL key/cert
        key: fs.readFileSync( cfg.ssl_key ),
        cert: fs.readFileSync( cfg.ssl_cert )

    }, processRequest ).listen( cfg.port );

} else {

    app = httpServ.createServer( processRequest ).listen( cfg.port );
}

var wss = new WebSocketServer( { server: app } );

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);

    ws.send(message);

  });

  ws.send('something');
});
10
crm

Ich hatte ein ähnliches Problem. Es stellte sich heraus, dass ich CloudFlare verwendet habe, das nur sehr spezifische Ports zulässt.

Daher wurde der Meteor, der auf Port 3000 lief, sofort blockiert.

Das Neukonfigurieren meiner Reverse Proxy-Einstellungen und das Ausführen von Meteor auf einem zugelassenen Port löste mein Problem.

Am Ende habe ich jedoch die Sockets meiner Meteor-Bereitstellung deaktiviert. Die Leistung scheint nicht beeinträchtigt worden zu sein. Viel Glück,

0
Andy