2026年11月6日
2026年11月6日
NginxでWebSocket接続をプロキシする方法
はじめに
WebSocketはHTTP上でのリアルタイム双方向通信を可能にするプロトコルです。これにより、ウェブアプリケーションやチャット機能などを実装することが容易になります。しかし、WebSocketの接続を効果的に管理するためにはWebサーバー(Nginxなど)での適切な設定が必要となります。
症状・背景
このテーマが必要になる主な場面:
- WebSocketをサポートしていない古いバージョンのNginxを使用している場合
- WebSocket接続で問題が発生し、プロキシ設定を見直す必要があるとき
- WebSocket経由でのデータ転送を最適化するために高度な設定が必要な時
手順・設定方法
ステップ1: Nginxのバージョン確認とアップデート
# 現在使用されているNginxのバージョンを確認します。
nginx -v
# 必要であれば、最新版のNginxに更新します。以下はUbuntuでの例です。
sudo apt-get update && sudo apt-get install nginx
ステップ2: WebSocket接続を許可する設定
# ディレクトリ /etc/nginx/sites-available/ 内にあるサーバーの設定ファイルを開きます。
sudo nano /etc/nginx/sites-available/default
# serverブロック内に以下の行を追加します。これによりWebSocket通信が可能になります。
location /ws {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
ステップ3: WebSocket接続のセキュリティ強化
# HTTPSを使用してWebSocket接続を確立します。SSL/TLS証明書が必要です。
sudo certbot --nginx -d yourdomain.com
# SSL設定ファイル (/etc/nginx/sites-available/default) に以下のように追加します。
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location /ws {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Ssl on;
}
}
ステップ4: セッション保持とWebSocketの整合性チェック
# ユーザーごとのセッションを維持するために、以下のような設定を行います。
http {
upstream websocket_backend {
server 127.0.0.1:8000;
}
server {
listen 443 ssl;
location /ws {
proxy_pass http://websocket_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
注意事項
- <実践的な注意点1>: WebSocketの接続を許可する設定は、セキュリティ上のリスクがあるため慎重に行うべきです。
- <実践的な注意点2>: WebSocket接続時のタイムアウトやバッファリングサイズを適切に調整することが重要です。
- <セキュリティ上の注意>: 定期的にNginxのログファイルをチェックし、異常なWebSocket接続がないか確認しましょう。
- <パフォーマンス/運用上の注意>: WebSocket接続が多発する場合や大量のデータ転送がある場合は、適切なキャッシュ設定を行うと効果的です。
まとめ
1. WebSocket対応: NginxでWebSocket通信を有効にするためにはproxy_set_headerとproxy_http_versionの設定が必要です。
2. HTTPSによる接続強化: WebSocket経由でのデータ転送は常にセキュリティに気をつけて、SSL/TLS証明書を利用しましょう。
3. セッション保持: ユーザー毎のWebSocket接続を維持するためにはupstreamブロックを使用します。
4. パフォーマンス最適化: WebSocketの大量データ転送時にはキャッシュ設定やバッファリングサイズの調整が必要です。
5. セキュリティ監視: 定期的なログファイルチェックを行い、異常なWebSocket接続を検出しましょう。
関連記事: