Nginx を使用して WebSocket プロトコルのサポートを実装する方法
WebSocket プロトコルは、Web アプリケーションで双方向通信を実装するプロトコルです。これにより、クライアントが最初に開始しなくても、サーバーがクライアントにアクティブにデータを送信できます。お願いです。従来の HTTP プロトコルと比較して、WebSocket プロトコルは待ち時間が短く、効率が高いため、高いリアルタイム要件を持つアプリケーション シナリオに適しています。この記事では、WebSocket プロトコルをサポートするリバース プロキシとして Nginx を使用する方法を紹介します。
Nginx は、負荷分散、リバース プロキシ、静的ファイル キャッシュなどのシナリオで使用できる、高性能のオープンソース リバース プロキシ サーバーです。 Nginx は、WebSocket プロトコルをサポートするためのいくつかのモジュールとディレクティブも提供します。以下は簡単な構成例です。
http { # 其他的http配置 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } }
上記の構成では、WebSocket 接続リクエストを処理するための /ws/
パスを定義します。 WebSocket リクエストは http://backend
アドレスにプロキシされます。 proxy_pass
ディレクティブはプロキシのバックエンド サーバー アドレスを設定するために使用され、proxy_http_version
ディレクティブはプロキシの HTTP プロトコル バージョンを設定するために使用されます。 proxy_set_header
ディレクティブは、リクエスト ヘッダー情報を設定するために使用されます。そのうちの Upgrade
と Connection
は必須であり、サーバーにプロトコルのアップグレードを実行するように通知するために使用されます。
上記の設定の map
ディレクティブは、クライアント要求ヘッダーの Upgrade
フィールドを $http_upgrade## にマップするために使用されることに注意してください。 # 変数を使用し、その値に基づいて
$connection_upgrade 変数を動的に設定します。これにより、リクエスト内に
Upgrade フィールドが見つかった場合、
Upgrade フィールドの値を
$connection_upgrade フィールドの値に設定できます。接続が閉じられます。
sudo service nginx startこれで、WebSocket プロトコルをサポートするリバース プロキシとして Nginx を使用する設定が完了しました。次のコード スニペットを使用して、WebSocket 接続をテストできます。
var socket = new WebSocket("ws://yourdomain.com/ws/"); socket.onopen = function () { console.log("Connection established."); }; socket.onmessage = function (event) { console.log("Received message: ", event.data); }; socket.onclose = function () { console.log("Connection closed."); };
ws://yourdomain.com/ws/ を実際の WebSocket アドレスに置き換え、ブラウザの開発者ツールを開いて表示します。コンソール出力。正常に接続してメッセージを受信できれば、WebSocket プロトコルが Nginx で正常にサポートされていることを意味します。
以上がNginx を使用して WebSocket プロトコルのサポートを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。