Ich habe versucht, Ratchet.io über SSL (dieses Problem: php ratchet websocket SSL connect?) zu laufen.Ratchet + nginx + SSL/sichere Websocket
Mein Webserver läuft auf myhost.mobi, und ich habe einen separaten virtuellen Host für den Websocket-Dienst "wws.myhost.mobi" erstellt.
Meine Web-Buchse:
$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, '0.0.0.0');
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
$webSock
);
Meine nginx config (Ich bin auf nginx 1.5.8):
upstream websocketserver {
server localhost:8080;
}
server {
server_name wss.myapp.mobi;
listen 443;
ssl on;
ssl_certificate /etc/ssl/myapp-mobi-ssl.crt;
ssl_certificate_key /etc/ssl/myapp-mobi.key;
access_log /var/log/wss-access-ssl.log;
error_log /var/log/wss-error-ssl.log;
location/{
proxy_pass http://websocketserver;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_read_timeout 86400; # neccessary to avoid websocket timeout disconnect
proxy_redirect off;
}
}
Mein clientseitige Skript: So
var conn = new ab.Session('wss://wss.myapp.mobi', function(o) {
// ...
}, function() {
console.warn('WebSocket connection closed');
}, {
skipSubprotocolCheck: true
});
Wenn ich die Seite in Firefox lade, sehe ich eine ausgehende Verbindung zu wss: //wss.myapp.mobi: 8080 /, die hängt (der Spinner) und niemals beendet wird oder stirbt. Ich sehe keine Spur von Anfragen, die im Backend in den Protokollen eintreffen.
Was fehlt mir dort?
Danke!
EDIT Ich habe gemerkt, dass ich zu WSS werden Verbindungs sollte: //wss.myapp.mobi, aber jetzt "101 Switching Protocols" Status Ich erhalte.
EDIT 2 Alles funktioniert jetzt mit der obigen Konfiguration. Der "101 Switching Protocols" Status stellt sich als normale Nachricht heraus. PROBLEM GELÖST!
Sie mir wirklich geholfen, von Browser-Client zugegriffen werden. Ich war nicht in der Lage, Websockets mit SSL in Nginx zu arbeiten. Stellt sich heraus, dass ich den Proxy_set_header X-Forwarded-Proto https fehlte; Richtlinie in der Konfiguration - und Ihre Frage hat mich dazu gebracht, es hinzuzufügen. Danke! – Rubinsh
Diese Frage ist gelöst (siehe Bearbeiten), aber die Lösung wird nicht erläutert. –
Konnten Sie die ausführliche Lösung als Antwort posten? –