Ich habe nginx läuft auf localhost statische html/css/js-Dateien dienen. Er stellt einem Remote-Server die erforderlichen RESTful-Datenbankdienste zur Verfügung. Ich muss auch Nginx einrichten, um einen entfernten WebSocket-Server zu proxy, aber mit allen Versuchen kläglich versagt.Nginx-Proxy für Javascript WebSocket-Client
Der Javascript-Client funktioniert, wenn ich die WebSocket-Server-URL wie folgt codieren:
socket = new WebSocket("ws://50.29.123.83:9030/something/socket");
Offensichtlich nicht eine optimale Lösung, und ich sollte location.host und ein Proxy an die gleiche Stelle zu erhalten, verwenden können . Ich konfigurierte nginx mit den folgenden:
http {
...
upstream websocket {
server 50.29.123.83:9030;
}
}
sever {
...
location /the_socket/ {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Dann wird der Client-Code aktualisiert:
socket = new WebSocket("ws://" + location.host + "/the_socket/something/socket");
Dies schlägt mit dem folgenden Fehler:
WebSocket connection to 'ws://localhost/the_socket/something/socket' failed: Error during WebSocket handshake: Unexpected response code: 404
Was mache ich falsch?
- ip & Portnummern geändert, um die unschuldigen
Es sieht so aus, als würde 'location.host' auf' localhost' verweisen, was wahrscheinlich auf die lokale nginx-Instanz verweist, aber wenn sie dasselbe sind, dann gibt es auch das Problem, dass 'location.host' auch nicht die Port in der URL –
location.host verweist auf localhost, wo das lokale nginx ausgeführt wird. Der Port wird im Proxy-Pass über die Upstream-Server-Deklaration angegeben. – Hilo
Sie greifen auf den Remote-Server mit '/ the_socket/sound/socket' zu, da Sie nicht versucht haben, das Präfix zu entfernen. –