Ich versuche, einen sicheren Node.js-Server ohne WebSocket-Server auf demselben Port zu erstellen. Der Port ist 8080.
Ich kann im Browser auf die URL zugreifen und eine Verbindung zu WebSockets herstellen, wenn ich den Port angebe.
https://ws.site.com// Funktioniert
wss://ws.site.com // Funktioniert nicht
wss://ws.site.com:8080 // Funktioniert
Warum ist das so? Was mache ich falsch? Dies ist die Nginx-Konfiguration
upstream ws.site.com {
server 127.0.0.1:8080;
}
server {
listen 443;
server_name ws.site.com;
ssl on;
ssl_certificate /path/ssl-bundle.crt;
ssl_certificate_key /path/myserver.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
access_log off;
proxy_pass https://ws.site.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 86400;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Antwort1
Der wss://
URL-Handler verwendet dieStandardport von WebSockets, also 443, wenn Sie kein eigenes Portsuffix hinzufügen. Wenn Sie es auf einem nicht standardmäßigen Port (8080) ausführen, benötigen Sie das Portsuffix.
Antwort2
Das Problem liegt in Ihren Einstellungen.
Ihr Upstream läuft auf Port 8080:
upstream ws.site.com {
server 127.0.0.1:8080;
}
Und Sie sagen, ich solle auf dem https-Port (443) nachsehen:
proxy_pass https://ws.site.com;
proxy_redirect off;
Beheben Sie das Problem mithttp://ws.site.com
Einfache Porttabelle:
- Port 80: http, ws
- Port 443: https, wss