Nginx 転送ソケットポート設定の詳細な説明

Nginx 転送ソケットポート設定の詳細な説明

Nginx によるソケット ポート転送の一般的なシナリオ: オンライン学習アプリケーションでは、通常の機能に加えてチャット ルーム機能が追加され、バックエンドではサービス プロバイダーとして swoole が選択され、フロントエンドが ip:port モードでサービスに直接リンクすることを望まないため、転送には Nginx を使用する必要があります。

通常、ユーザー ページでソケット リンクを直接確立できますが、このような操作を行うとポートが公開され、セキュリティ上のリスクが生じます。転送に Nginx を使用すると、ポートを非表示にできます。追加の問題は、転送プロセス中に一部のヘッダー パラメータもソケット サービス プロバイダーに渡す必要があり、残りは通常のプロトコルから Websocket への変換を Nginx で処理するだけで済むことです。

このうち、「Upgrade」はホップバイホップのヘッダーであり、クライアントからプロキシサーバーに転送することはできません。プロキシを転送することで、クライアントは CONNECT メソッドを使用してこの問題を回避できます。ただし、クライアントはプロキシ サーバーを認識せず、プロキシ サーバー上で特別な処理を必要とするため、これはリバース プロキシでは機能しません。同時に、「Upgrade」と「Connection」を含むホップバイホップ ヘッダーは渡すことができないため、Websocket に変換するときに次の 2 つのパラメーターを指定する必要があります。例:

場所 /チャット/ {
  proxy_pass http://backend;
  プロキシ_http_バージョン 1.1;
  proxy_set_header アップグレード $http_upgrade;
  proxy_set_header 接続「アップグレード」;
}

詳細: プロキシ サーバーに転送される「接続」ヘッダー フィールドの値が、クライアント要求ヘッダーの「アップグレード」フィールドの値に依存するようにします。例えば:

http {
  マップ $http_upgrade $connection_upgrade {
    デフォルトのアップグレード。
    '' 近い;
  }

  サーバー{
    ...

    場所 /チャット/ {
      proxy_pass http://backend;
      プロキシ_http_バージョン 1.1;
      proxy_set_header アップグレード $http_upgrade;
      proxy_set_header 接続 $connection_upgrade;
    }
  }

注: 例の http://backend は、負荷分散されたサーバーのグループです。サーバーが 1 つしかない場合は、proxy_pass http://127.0.0.1:9501; のように記述できます。

さらに、デフォルトでは、60 秒以内にデータを転送しなかった接続は閉じられますが、この時間は proxy_read_timeout ディレクティブを使用して延長できます。あるいは、プロキシ サーバーを構成して、定期的に ping フレームを送信し、タイムアウトをリセットしてリンクが利用可能かどうかを確認することもできます。

参考リンク: Nginx Websocket プロキシ

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • nginxプロキシsocket.ioサービスの落とし穴の詳細な説明
  • nginx websocket設定の詳細な説明
  • Nginx リバース プロキシ WebSocket 応答 403 の解決方法の詳細な説明
  • Nginx 実戦リバースプロキシ WebSocket 構成例
  • Nginx サーバーの Websocket 設定方法の紹介
  • Nginx サーバーにおけるソケットセグメンテーションの詳細な説明
  • Nginx を WebSocket プロキシとして使用するチュートリアル
  • Nginx リバース プロキシ Websocket 構成例

<<:  mysql の認証、起動、およびサービスの起動のための一般的なコマンド

>>:  JSフロントエンドモジュール化のいくつかの仕様についての簡単な説明

推薦する

Linux ソースコードからのソケット (TCP) バインドの詳細な説明

目次1. 最も単純なサーバー側の例2. バインドシステムコール2.1、inet_bind 2.2、i...

Vueカスタム指示により、ポップアップウィンドウのドラッグ4辺ストレッチと対角ストレッチ効果を実現

導入同社の最近の Vue フロントエンド プロジェクトの要件: ポップアップ ウィンドウのドラッグ、...

MySQL 8.0.20 Window10無料インストール版設定とNavicat管理チュートリアルグラフィック詳細説明

1. MySQL 8.0.20をダウンロードして解凍するダウンロードリンク: https://dev...

Vue+SSMは画像アップロードのプレビュー効果を実現します

現在の要件は、ファイルのアップロード ボタンがあることです。ボタンをクリックすると、アップロードする...

docker ベースで Prometheus+Grafana を構築する手順の詳細説明

1. プロメテウスの紹介Prometheus は、もともと SoundCloud によって開発された...

Linux ディスクとディスク パーティションを理解するための記事

序文Linux システムのすべてのハードウェア デバイスは、ファイルの形式で表現され、使用されます。...

HTMLタグを閉じるのを忘れないでください

Web 標準に準拠した Web ページの構築は、jb51.net が常に全員と議論しているトピックで...

Postman に基づく HTTP インターフェース テスト プロセスの分析

偶然、素晴らしい人工知能のチュートリアルを発見したので、みんなと共有せずにはいられませんでした。この...

Docker コンテナ ソース コードのデプロイ httpd ストレージ ボリュームを使用して Web サイトをデプロイする (推奨)

目次Dockerコンテナのソースコードを使用してhttpdをデプロイし、ストレージボリュームを使用し...

yum の基本的な使い方と例(推奨)

yumコマンドYum (フルネームは Yellow dog Updater, Modified) ...

モバイルの赤い封筒の雨機能ページを実装するための JavaScript HTML

この記事の例では、モバイル紅包雨機能ページを実現するためのHTMLの具体的なコードを共有しています。...

Win10 の組み込み Linux システムを使用して Spring Boot プロジェクトを開始する方法

1. Windows10の組み込みLinuxサブシステムをインストールする1.1. Linuxサブシ...

CSSを使用して炎の効果を作成する方法

本文は以下から始まります。 123WORDPRESS.COM ダウンロード:純粋な CSS3 で超リ...

CSSを使用して特別なロゴやグラフィックを実装する

1. はじめに画像は多くのスペースを占め、画像の数が増えるほど管理が難しくなるため、シンプルなラベル...

Ansible を使用した Nginx のバッチ デプロイのサンプル コード

1.1 nginxインストールパッケージとインストールスクリプトをクライアントにコピーし、スクリプト...