fragen stichworte

NGINX Proxy-Setup für das Protokoll ws: //

Ich versuche, NGINX für den Proxy-Socket-Verkehr einzurichten. Ich verwende eine Webseite auf NGINX (Port 80), die einen MJPEG-Feed von Port 8080 hat und auch Web-Socket-Verkehr über Port 8090 übernimmt. Ich kann den MJPEG-Stream, aber nicht die Web-Sockets, proxy. In meiner Webseite wurde clientseitiges Javascript ohne Proxy mit folgender Zeile verbunden:

var conn = new WebSocket ('ws://192.168.0.14: 8989/ws');

Als Proxy habe ich versucht, die folgende NGINX-Konfiguration einzurichten:

   #Proxy the Web Socket Traffic
    #----------------------------------------------
    location/sock/{
        proxy_pass ws://localhost:8989/ws;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    #Proxy the MJPEG Streamer feed
    #----------------------------------------------
    location/mjpeg/{
            proxy_pass http://localhost:8080/;
    }

Und dann wurde das clientseitige Javascript folgendermaßen geändert:

var conn = new WebSocket ('http://192.168.0.14/sock/');

Beim Neustart von NGINX ergibt sich jedoch:

Job für nginx.service ist fehlgeschlagen. Weitere Informationen finden Sie unter 'systemctl status nginx.service' und 'journalctl -xn'.

Wenn ich die Proxy-Pass-Zeile in "proxy_pass http://localhost: 8989/ws ändere"; Der NGINX-Dienst wird dann erfolgreich neu gestartet, aber ich kann keine Web-Socket-Verbindung mehr herstellen.

Gibt es noch etwas, das ich konfigurieren muss, damit NGINX einen Proxy für die ws://Adressen erhält? Ist http://gleichwertig, wenn das Protokoll aktualisiert wird? Wenn letzteres wahr ist, warum funktioniert es dann nicht?

Ich stelle in diesem Beitrag fest, dass sie ws://in der Proxy-Pass-Anweisung verwenden. Aber es funktioniert nicht für mich NGINX: Wie man HTTP (s) Verkehr auf einen Server und ws (s) Verkehr auf einen anderen Proxy gibt?

antworten

In keiner verfügbaren nginx-Dokumentation wird das ws:// -Schema als verfügbar für die Verwendung in der Konfiguration angegeben. Kein Wunder, dass der Nginx nicht startet, ich wette, es ist der Konfigurationsfehler, über den er sich beschwert.

Und Sie haben definitiv die korrekte Konfiguration für den Websockets-Proxy. Warum es nicht funktioniert - es ist immer noch entscheidend, dies kann auf eine Reihe von Gründen zurückzuführen sein: niemand hört wirklich auf dem tcp/8989 zu, oder es kommt zu einem Anwendungsfehler im Listener.