lrlikebrother

Raspberry Pi 構築 Web Socket編

Misskeyサーバーでの非同期の動作がうまくいかなかった

Misskeyサーバーを非同期で通信したいのだがリロードしないと投稿やスタンプが反映されない Webサイトで開発者モードを見てみるとWeb Socket Errorが発生している

なぜWebSocketが落ちているのか

Dockerを使ってリバースプロキシ経由でMisskeyサーバーを立てているため 該当の通信を行う先が異なっているためうまく処理が走らない事が原因だった

解決方法

まず、http_versionを1.1以降に変える

デフォルトでは1.0になるので明示的に設定しないといけない

「proxy_set_header Host」: ホスト情報をプロキシサーバのものではなく接続元のものに書き換える

「keep-alive」: webソケットに必要

「proxy_set_header Upgrade」: プロトコルスイッチという仕組みで通信プロトコルをHTTP/1.1からwebsocketに変更するらしい

「proxy_set_header Connection」: 送信先にコネクションを維持するか否かを伝えるためのヘッダーらしい

これらは1.1以降で利用可能なヘッダ設定でした

以下のようにSocket通信をしたいNginxファイルの元のコードに上記らを追記する

server {
    listen 443;
    server_name xxx.sample.com;

    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $connection_upgrade;

    location / {
        proxy_pass   http://jupyterlab:8888;
    }
}

Nginx公式

参考サイト