ホームページ > 運用・保守 > Nginx > Websocketプロキシにnginxを構成するにはどうすればよいですか?

Websocketプロキシにnginxを構成するにはどうすればよいですか?

Emily Anne Brown
リリース: 2025-03-17 17:01:02
オリジナル
968 人が閲覧しました

Websocketプロキシにnginxを構成するにはどうすればよいですか?

Websocketプロキシ用のnginxを構成するには、nginxがWebSocketプロトコルとそのア​​ップグレードリクエストを適切に処理できるようにする必要があります。これをセットアップする方法に関する段階的なガイドを次に示します。

  1. nginx構成ファイルを編集します。
    nginx構成ファイルを開きます(通常、 /etc/nginx/nginx.conf nginx.confにあるか、サイト固有の構成のために/etc/nginx/sites-available/内にあります)。
  2. WebSocketプロキシ設定を追加します:
    WebSocketサポートを有効にするhttpまたはserverブロック内で、次の構成スニペットを追加します。

     <code class="nginx">http { ... server { listen 80; server_name example.com; location / { proxy_pass http://your_backend_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } }</code>
    ログイン後にコピー
    • proxy_http_version 1.1 、nginxがwebsocket接続に必要なHTTP/1.1を使用することを保証します。
    • proxy_set_header Upgrade $http_upgradeおよびproxy_set_header Connection "upgrade" WebSocketアップグレードリクエストを処理するために重要です。
    • proxy_cache_bypass $http_upgrade Websocket接続がキャッシュをバイパスすることを保証します。これは一般的に適切です。
  3. nginxをテストして再起動します:
    これらの変更を行った後、 nginx -tで構文エラーの構成をテストし、 sudo systemctl reload nginxまたはsudo systemctl restart nginx

WebSocket接続に必要なNGINX設定は何ですか?

nginxがWebSocket接続を適切に処理できるようにするには、NGINX構成のlocationブロック内で次の設定が必要です。

  • proxy_pass :Websocketリクエストがプロキシになるバックエンドサーバーを指定します。
  • proxy_http_version 1.1 :websocket接続に必要なHTTPプロトコルバージョンを1.1に設定します。
  • proxy_set_header Upgrade $http_upgradeUpgradeヘッダーの値をクライアントからバックエンドサーバーに渡します。
  • proxy_set_header Connection "upgrade"Connectionヘッダーを「アップグレード」に設定し、WebSocketアップグレードリクエストに合図します。
  • proxy_set_header Host $host :ホストヘッダーをクライアントからバックエンドサーバーに渡します。
  • proxy_cache_bypass $http_upgrade :websocket接続をキャッシュしてはならないため、WebSocket接続がキャッシュをバイパスすることを保証します。

これらの設定は、WebSocket接続が正しく処理され、バックエンドサーバーに転送されるように協力します。

nginxがWebSocketプロトコルのアップグレードを正しく処理することを確認するにはどうすればよいですか?

NginxがWebSocketプロトコルのアップグレードを正しく処理するようにするには、前のセクションで説明したように必要な構成を実装する必要があります。アップグレードが適切に処理されていることを確認するための追加のヒントを次に示します。

  1. 構成を確認してください:
    NGINX構成に必要なすべての設定、特にproxy_set_header Upgrade $http_upgradeおよびproxy_set_header Connection "upgrade"を含めたことを確認してください。
  2. ブラウザ開発者ツールを使用します。
    ブラウザでWebアプリケーションを開き、ブラウザの開発者ツールを使用してネットワークリクエストを検査します。 WebSocket接続を探して、アップグレード応答が成功したことを確認してください(ステータスコード101)。
  3. nginxログを監視します:
    Nginxアクセスとエラーログを確認して、WebSocket関連のエラーがないことを確認してください。ログは/var/log/nginx/にあります。 WebSocketのアップグレードが成功しても、エラーが記録されません。
  4. WebSocketクライアントツールでテスト:
    wscatwebsocatなどのコマンドラインツールを使用して、WebSocket接続を手動で開始し、Nginxを介して正常に接続することを確認します。
  5. バックエンドサーバーの互換性を確保します:
    バックエンドサーバー(eg、node.js、javaなど)が、WebSocket接続とアップグレードリクエストを正しく処理するように構成されていることを確認してください。

これらの手順に従うことにより、NginxがWebsocketプロトコルのアップグレードを正しく処理していることを確認できます。

nginxでWebsocketプロキシが失敗した場合、どのようなトラブルシューティング手順を実行すればよいですか?

nginxでのProxingのWebsocketの問題に遭遇した場合は、これらのトラブルシューティング手順に従ってください。

  1. nginx構成を確認します:
    WebSocketプロキシの構成設定が適切なhttpserver 、およびlocationブロックに正しく追加されていることを確認します。 nginx -tを使用して、構文エラーの構成をテストします。
  2. nginxログを検査します:
    WebSocket関連のエラーまたは問題について、NGINXアクセスとエラーログ( /var/log/nginx/ )を調べます。 WebSocket Connectionsとアップグレードリクエストに関連するエントリを探します。
  3. バックエンドサーバーの構成を確認します:
    WebSocket接続とアップグレード要求を処理するようにバックエンドサーバーが正しく構成されていることを確認してください。 WebSocket関連のエラーについては、バックエンドサーバーのログを確認してください。
  4. ブラウザ開発者ツールを使用します。
    ブラウザ開発者ツールを使用して、ネットワークリクエストとWebSocket接続を検査します。接続フェーズまたはデータ送信中にエラーを確認してください。
  5. WebSocketクライアントツールでテスト:
    wscatwebsocatなどのツールを使用して、コマンドラインから直接WebSocket接続をテストします。これは、問題がNginxまたはバックエンドサーバーのかどうかを分離するのに役立ちます。
  6. ファイアウォールまたはプロキシの問題を確認してください。
    NGINXとバックエンドサーバー間、またはクライアントとNGINXの間でWebSocket接続をブロックするファイアウォールまたはプロキシがないことを確認してください。
  7. 接続のタイミングを監視:
    WebSocket接続は、確立するのに時間がかかりすぎると失敗する可能性があります。必要に応じて、nginxのproxy_read_timeoutproxy_send_timeoutを調整します。
  8. WebSocketプロトコルバージョンを確認してください。
    クライアントとサーバーの両方がサポートされているWebsocketプロトコルバージョンを使用していることを確認してください。不一致は、接続の障害につながる可能性があります。

これらのトラブルシューティング手順を体系的に通過することにより、nginxでプロキシングするWebsocketの問題を特定して解決できるはずです。

以上がWebsocketプロキシにnginxを構成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート