web-dev-qa-db-ja.com

ws://プロトコルのNGINXプロキシ設定

NGINXをセットアップしてWebソケットトラフィックをプロキシしようとしています。ポート8080からのMJPEGフィードがあり、ポート8090を介してWebソケットトラフィックも受け取るNGINX(ポート80)でWebページを実行しています。MJPEGストリームをプロキシできますが、Webソケットはプロキシできません。私のウェブページでは、クライアント側のjavascriptは次の行を使用してプロキシなしでうまく接続していました。

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

これをプロキシするために、次のNGINX構成をセットアップしてみました。

    #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/;
    }

次に、クライアント側のJavaScriptを次のように変更しました。

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

ただし、NGINXを再起動すると、次のような結果になります。

Nginx.serviceのジョブが失敗しました。詳細については、「systemctl status nginx.service」および「journalctl -xn」を参照してください。

プロキシパスの行を「proxy_pass http:// localhost:8989/ws ;」に変更すると、その後、NGINXサービスは正常に再起動しますが、Webソケット接続をもう行うことができます。

NGINXがws://アドレスにプロキシするように構成する必要があるものは他にありますか?プロトコルをアップグレードする場合、http://は同等ですか?後者が当てはまる場合、なぜ機能しないのですか?

この投稿で、彼らがプロキシパスステートメントでws://を使用していることに気付きました。しかし、それは私にとっては機能しません NGINX:http(s)トラフィックを1つのサーバーにプロキシし、ws(s)トラフィックを別のサーバーにプロキシする方法?

2
user383341

利用可能なnginxのドキュメントには、構成で使用できるws://スキーマについての記述はありません。 nginxが起動しないのも不思議ではありません、それはそれが不平を言っている設定エラーだと思います。

そして、あなたは間違いなく 正しい設定 をwebsocketsプロキシのために持っています。それが機能しない理由について-それはまだ判断次第ですが、これは多くの理由が原因である可能性があります:誰も本当にtcp/8989でリッスンしないか、リスナーでアプリケーションエラーが発生します。

2
drookie