概要説明
Nginxをフロントエンドに使い、Node.jsをバックエンドのWebSocketサーバーとして動作させることで、リアルタイム通信と高パフォーマンスなWebサービスを実現しています。PM2を使ってNode.jsプロセスを監視し、サーバーの再起動時にもサービスを自動復旧できるようにしています。
またSSL化を行い、暗号化された**wss://**通信に対応しています。
技術 => 用途・役割
- Nginx => リバースプロキシ、ロードバランサー、静的コンテンツ配信、SSL/TLS終端処理
- Node.js => 非同期処理に優れたJavaScriptランタイム。WebSocketサーバーの構築に使用
- WebSocket (wss) => ブラウザとサーバー間のリアルタイム双方向通信を実現
- PM2 Node.js => プロセスの永続化と監視、自動再起動、ログ管理-
- HTTPS =>(wss://)通信の暗号化対応
- HTML/JavaScript => フロントエンドでWebSocketを利用したリアルタイムデータの表示
Nginxがフロントエンドのゲートウェイとして動作し、HTTPリクエストとWebSocket通信のプロキシを担当しています。Node.jsで構築したWebSocketサーバーはリアルタイム通信を処理し、複数のクライアントに低遅延なデータ配信を実現します。
サーバーの再起動や障害が発生しても、PM2がプロセスを自動で復旧します。また、SSL化されているため、通信は暗号化され、外部からの盗聴や改ざんを防ぎます。
処理の流れ
クライアントが ttps://your-domain.com にアクセスします。
→ Nginxがindex.htmlを返します。
クライアントはWebSocketサーバーに接続します (wss://your-domain.com/ws/)。
→ NginxがWebSocketプロトコルをNode.jsのWebSocketサーバーにプロキシします。
Node.jsのWebSocketサーバーがリアルタイム通信を処理し、クライアントにメッセージを返します。
→ クライアントは即座にメッセージを受信して表示します。
PM2がNode.jsプロセスを監視し、障害時は自動で再起動します。
→ サーバーのダウンタイムを最小限に抑えます。
技術のメリット
リアルタイム通信 (WebSocket)
クライアントとサーバーが常に接続され、リアルタイムでデータ交換が可能。
HTTPリクエストのように繰り返しリクエストを送る必要がないため効率的。
高パフォーマンスと非同期処理 (Node.js)
Node.jsは非同期I/Oに強く、多くの同時接続を効率よく処理できる。
リアルタイム通知、チャット、ダッシュボード更新などに最適。
プロセス管理と永続化 (PM2)
障害時の自動復旧、サーバー再起動時の自動起動が可能。
ログ管理、負荷監視、CPUメモリ使用率の監視が一体化されている。
SSL/TLS対応 (Let's Encryptなど)
通信が暗号化されるため安全性が向上。
**wss://**を利用することで、セキュリティが高いリアルタイム通信を実現。
1,クライアントブラウザ
ブラウザが wss://your-domain.com/ws/ でWebSocket接続を行います。
2,Nginx
リバースプロキシ(HTTP/HTTPSリクエストとWebSocketプロキシを処理)
Let's Encrypt を使ったSSL終端処理。
3,Node.js WebSocketサーバー
リアルタイム通信を処理。
4、PM2
Node.jsプロセスを監視し、障害時に再起動。
クライアント → Nginx → Node.js → クライアントへの双方向通信