Was ist passiert :
Der Endbenutzer hat in einem Terminalfenster die Nachricht disconnected
erhalten, als er versuchte, eine Sitzung über die Web-Benutzeroberfläche des Teleport-Proxys zu öffnen.
Was Sie erwartet hatten :
Eine Web-Teleport-Sitzung, die erfolgreich geöffnet werden soll, oder eine Fehlermeldung mit dem Hinweis Websockets upgrade failed, please contact your Teleport administrator.
Wie man es reproduziert (so minimal und präzise wie möglich) :
Stellen Sie einen Load Balancer vor den Teleport-Proxy, der keine Upgrades der Websockets-Verbindung unterstützt. Als schnellen Test setzen Sie in Firefoxs about:config
network.websocket.max-connections
auf 0
.
Hinweis: Das mit Citrix NetScalers verwendete Standard-HTTP-Profil enthält möglicherweise keine Unterstützung für Websockets. Verschiedene Methoden zum Beenden von SSL am Rande von Load-Balancer-Produkten von Cloud-Anbietern (bei denen kein sauberer Layer4-VIP bis hin zum Teleport-Proxy verfügbar ist) lösen dieses Verhalten ebenfalls aus.
Umwelt :
teleport version
): Teleport Enterprise v2.4.0
tsh version
): gleichBrowser-Umgebung
Relevante Debug-Protokolle, falls zutreffend
In Teleport-Proxy-Protokollen gibt es einen Eintrag, der anzeigt, dass die Sitzung versucht wurde, aber keine Hinweise darauf, dass das Upgrade auf Websockets fehlgeschlagen ist: INFO Generated session
..
Hutspitze an Daniel G, weil er das geschlachtet hat.
Diese kryptische Fehlermeldung kann auftreten, wenn ein Administrator versucht, einen lokalen Apache 2.x-Proxy vor die Web-Benutzeroberfläche des Teleport-Proxys zu stellen, wobei die Apache-Konfiguration Websockets (wss) nicht explizit unterstützt.
Leute tun dies in der Regel in Unternehmensumgebungen, damit Endbenutzer auf eine Vanity-https-URL zugreifen können, ohne Port: 3080 angeben zu müssen. (Oder es sind Firewalls vorhanden, die den Datenverkehr auf 443 beschränken.)
Ja, lassen Sie uns die Fehlermeldung in 2.5.1 verbessern
Wenn jemand hierher kommt und nach der Nginx-Konfiguration sucht, um dies zu lösen, ist diese vielleicht nicht die beste, aber sie funktioniert:
location / {
proxy_pass https://127.0.0.1:3080;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
Ebenso sah die Konfiguration, die ich für Apache benötigte, folgendermaßen aus:
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3080/$1 [P,L]
Nach dem Laden von mod_proxy_wstunnel.so
natürlich. Viel Glück!
Ich habe mir die Javascript-Websocket-Ereignisse angesehen und leider keinen Weg gefunden, sie zu bekommen. Obwohl es in dem Fehlerstapel vorhanden ist, der in der Browserkonsole angezeigt wird, ist dieser bestimmte Nachrichtentext nicht über das Fehlerereignis selbst verfügbar, das an Websocket-Ereignishandler übergeben wird. Ich habe ein ähnliches Problem
Hilfreichster Kommentar
Wenn jemand hierher kommt und nach der Nginx-Konfiguration sucht, um dies zu lösen, ist diese vielleicht nicht die beste, aber sie funktioniert: