Nginxのソケット転送ポートを設定する方法

PHPz
リリース: 2023-05-24 11:37:06
転載
2554 人が閲覧しました

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

通常の状況では、ユーザー ページにソケット リンクを直接確立できますが、そのような操作ではポートが公開され、特定のセキュリティ リスクがもたらされます。転送に nginx を使用すると、ポートが非表示になる可能性があります。さらに問題となるのは、転送プロセス中に一部のヘッダー パラメーターもソケット サービス プロバイダーに渡す必要があることですが、その他のパラメーターは通常のプロトコルから WebSocket への変換を処理するために nginx のみが必要であることです。

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

location /chat/ {
  proxy_pass http://backend;
  proxy_http_version 1.1;
  proxy_set_header upgrade $http_upgrade;
  proxy_set_header connection "upgrade";
}
ログイン後にコピー

Advanced: forwardプロキシ サーバーへの「接続」ヘッダー フィールドの値は、クライアント リクエスト ヘッダーの「アップグレード」フィールドの値によって異なります。例:

http {
  map $http_upgrade $connection_upgrade {
    default upgrade;
    ''   close;
  }

  server {
    ...

    location /chat/ {
      proxy_pass http://backend;
      proxy_http_version 1.1;
      proxy_set_header upgrade $http_upgrade;
      proxy_set_header connection $connection_upgrade;
    }
  }
ログイン後にコピー

注: この例の http://backend は、負荷分散されたサーバーのグループです。サーバーが 1 つしかない場合は、proxy_pass http://127.0.0.1 のように記述できます。 :9501;。さらに、デフォルトでは、60 秒以内にデータを配信しないリンクは閉じられますが、proxy_read_timeout ディレクティブを使用して拡張できます。または、タイムアウトをリセットしてリンクが利用可能かどうかを確認するために、定期的に ping フレームを送信するようにプロキシ サーバーを構成することもできます。

以上がNginxのソケット転送ポートを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!