1

サーバーがリッスンするunixソケットにトラフィックをリダイレクトするための小さなnginx confを作成しましたdaphne(サーバーはに使用されますdjango)。

ドキュメントによると:

すべてのトラフィックに Daphne を使用すると、HTTP と WebSocket の間で自動ネゴシエーションが行われるため、WebSocket を別のポートまたはパスに配置する必要はありません。

したがって、websockets と Http トラフィックの両方を同じ UNIX ソケットにプロキシしたいと思います。

  1. 出来ますか?

  2. どうすればいいですか?

これが私がこれまでに試したことです:

upstream django_ws {
         server unix:///path/to/ws.sock;
}

server {
       listen 8082;
       server_name 127.0.0.1;
       charset utf-8;

       root /path/to/root;

       set $myroot $document_root;

       location / {
                proxy_pass http://django_ws;
                #proxy_http_version 1.1;
                #proxy_set_header Upgrade websocket;
                #proxy_set_header Connection upgrade;
       }
}
  • ロケーション ブロック内の行のコメントを外すと、ページが空白になります。

  • そうしないと、ページは表示されますが、websockets が機能していないようです。

どうすればこれを解決できますか?

すべてが開発サーバーで正常に動作します。

4

1 に答える 1

2

私は解決策を見つけました:

私はこのように私のウェブソケットをインスタンス化します:

var socket = new WebSocket(ws_scheme + "://" + window.location.host
                           + "/ws" + window.location.pathname);

/wsしたがって、 へのリクエストと へのリクエストを分離することができます/

だから私はこれをやった:

upstream django_ws {
         server unix:///path/to/ws.sock;
}

server {
       listen 8082;
       server_name 127.0.0.1;
       charset utf-8;

       root /path/to/root;

       set $myroot $document_root;


       location /ws {
                proxy_pass http://django_ws;
                proxy_http_version 1.1;
                proxy_set_header Upgrade websocket;
                proxy_set_header Connection upgrade;
       }

       location / {
                proxy_pass http://django_ws;
       }
}

そしてそれはうまくいきました!

于 2016-09-27T03:08:27.837 に答える