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 サイトの他の関連記事を参照してください。