ブログ | NGINX

NGINX 1.15.2 で同じポート経由で SSL と非 SSL プロトコルを実行する

NGINX-F5 水平黒タイプ RGB の一部
ファイサル・メモン サムネイル
ファイサル・メモン
2018年7月24日公開

本日、NGINX Open Source 1.15.2 が利用可能になったことをお知らせいたします。 このリリースの重要な機能の 1 つは、新しい$ssl_preread_protocol変数です。これにより、TCP (ストリーム) プロキシを使用してトラフィックを転送するときに、SSL/TLS と他のプロトコルを区別できるようになります。 これは、たとえば SSL/TLS と SSH サービスを同じポートで実行してファイアウォールの制限を回避する場合に便利です。

この新機能は、 NGINX Plus R16 の今後のリリースで NGINX Plus のお客様にもご利用いただけるようになります。

$ssl_preread_protocol をいつ、どのように使用するか

httpまたはstreamモジュールのいずれかを使用して SSL/TLS トラフィックを終了して復号化すると、$ ssl_protocol ( httpstream ) 変数はクライアントが使用する SSL または TLS のバージョンを取得します。 ただし、ストリームモジュールを使用して基本的な TCP プロキシまたはロード バランサーを実装し、SSL/TLS トラフィックを復号化せずに転送したい場合もあります。

stream_ssl_prereadモジュールは、SSL または TLS 接続の最初のClientHelloメッセージを検査し、接続の管理に使用できるいくつかの値を抽出します。 リリース 1.15.2 で追加された$ssl_preread_protocol変数は、 ClientHelloメッセージのclient_versionフィールドから最新の SSL/TLS バージョン番号を取得します。 ClientHelloメッセージにsupported_versions拡張が存在する場合、変数はTLSv1.3に設定されます。

接続で SSL または TLS のバージョンが使用されない場合、 $ssl_preread_protocol変数は空白になり、接続で SSH などの SSL/TLS 以外のプロトコルが使用されていることを示します。

次の構成スニペットでは、マップブロック内の$ssl_preread_protocol変数を使用して、 $upstream変数を、接続で使用されているプロトコルに適したアップストリーム グループの名前に設定します。 次に、 proxy_passディレクティブは、選択されたアップストリーム グループにリクエストを転送します。 $ssl_preread_protocol変数が機能するには、 ssl_preread onディレクティブをサーバーブロックに含める必要があることに注意してください。

stream { アップストリーム ssh { server 192.0.2.1:22; } アップストリーム web { server 192.0.2.2:443; } map $ssl_preread_protocol $upstream { default ssh; "TLSv1.2" web; } # 同じポートで SSH と SSL を使用する server { listen 443; proxy_pass $upstream; ssl_preread on ; } }

設定を有効にするには、クライアントはデフォルトのポート 22 ではなくポート 443 で SSH サーバーにアクセスする必要があります。 たとえば、MacOS および Linux の組み込み SSH クライアントでは、 -pフラグを使用してポートを変更できます。

$ ssh sshサーバのIPアドレス-p 443

最新のNGINXバージョンを入手する方法

NGINX の最新バージョンは、公式リポジトリのメインライン ブランチで常に利用できます。

もっと詳しく知る

NGINX Open Source 1.15.2 には、追加の機能強化とバグ修正が含まれています。 新機能の完全なリストについては、 NGINX の変更ログを参照してください。


「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"