Nginx Proxy Manager (以下、NPM と呼びます) は、複数のリバース プロキシ サーバーを管理するためのシンプルかつ強力な方法を提供する Nginx ベースのプロキシ管理ツールです。最近、NPM を使用しているときに、NPM と WebSocket の間で効率的な通信を実現する方法という問題に遭遇しました。この記事では、この目標を達成するために私の経験と教訓を共有し、具体的なコード例を示します。
始める前に、WebSocket について簡単に見てみましょう。 WebSocket は、単一の TCP 接続を介した全二重通信用のプロトコルです。 HTTP とは異なり、WebSocket を使用すると、クライアントがリクエストを行う必要がなく、サーバーがクライアントにデータをアクティブに送信できます。 WebSocket は、遅延が少なく効率が高いため、チャット アプリケーション、リアルタイム データ送信などのリアルタイム アプリケーションで非常に人気があります。
NPM は Nginx を使用して HTTP および HTTPS リクエストを処理し、リバース プロキシ機能を提供します。 WebSocket との効率的な通信を実現するには、WebSocket 要求を転送し、関連するヘッダー情報を正しく処理するように NPM を構成する必要があります。以下は、簡単な Nginx 構成の例です。
server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } location /api/ { ... } location /admin/ { ... } ... upstream backend { server backend.example.com; } }
上記の構成では、2 つのロケーション ブロックを使用して WebSocket リクエストを処理します。最初のロケーション ブロックはルート パスの下で WebSocket リクエストを処理するために使用され、2 番目のロケーション ブロックは /ws/ で始まる WebSocket リクエストを処理するために使用されます。これら 2 つのロケーション ブロックでは、proxy_pass ディレクティブを使用してリクエストをバックエンド サーバーに転送し、関連する HTTP ヘッダー情報を設定して、WebSocket リクエストがバックエンド サーバーに正しく配信されるようにします。
Nginx の構成に加えて、WebSocket 関連のロジックをバックエンド サーバーに実装する必要もあります。 Node.js と WebSocket ライブラリを使用して実装された簡単な例を次に示します。
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) => { console.log('Client connected'); ws.on('message', (message) => { console.log(`Received: ${message}`); }); ws.send('Hello, client!'); });
上記のコードでは、WebSocket サーバーを作成し、接続イベントで新しい接続を処理します。接続イベント ハンドラーでは、クライアントからのメッセージを処理し、応答を送信できます。
上記の Nginx 構成と WebSocket サーバー コードを使用すると、NPM と WebSocket 間の効率的な通信を実現できます。たとえば、NPM を使用して HTTP リクエストを処理し、特定の URL 上の WebSocket リクエストをバックエンド WebSocket サーバーに転送できます。これにより、HTTP と WebSocket の両方を同じドメイン名で使用できるようになり、WebSocket 要求を他の HTTP 要求と同様に NPM で管理できるようになります。
要約すると、NPM を適切に構成し、バックエンド WebSocket サーバーのコードを実装することで、NPM と WebSocket 間の効率的な通信を実現できます。これにより、NPM を使用しながら WebSocket リクエストを簡単に処理し、リアルタイム アプリケーションに必要なリアルタイム通信機能を実装できるようになります。この記事のコード例と説明がお役に立てば幸いです。
以上がNginx Proxy ManagerとWebSocket間の効率的な通信の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。