2017-10-09 16 views
0

ExpressでNodeJSにHTTPS経由のサーバーがあります。NodeJS/Express HTTP over HTTP(HTTPS)の説明の自動検出?

ファイルをアップロードするときに、コントローラのreq.protocolディレクティブを使用してURLのHTTPまたはHTTPSの「一部」を取得しました。ファイルを絶対URLで保存できるようにしました。問題は、express(http://expressjs.com/en/api.html#trust.proxy.options.table)の "trust proxy"設定を有効にしないと、HTTPSが検出されないことです。

実際のリダイレクト(HTTP URLとHTTPSへの301リダイレクトを実行するサーバーを使用している場合)の場合、この設定が使用されていると考えました。

だから、これはむしろ解決策1よりも、説明の質問の詳細です:

ことによってURLを呼び出すときにHTTPSが検出されないのはなぜ?

答えて

1

trust proxyは、301のリダイレクトとは関係ありません。プロキシ背後にノードサーバーを実行するときの設定が重要であることを

+----------HTTPS--------+---HTTP---+ 
    |      |   | 
client --> internet --> proxy --> node.js 

あなたがインターネットとあなたのノードサーバ間のプロキシのいくつかの並べ替えを持っているのが典型的です。例えば、CDNサーバ、ロードバランサ、または単にnginxインスタンスなどである。 HTTPS接続は、クライアントとそのプロキシ間で確立されます。プロキシは、SSL証明書の必要な論争と接続の暗号化に気をつけ、アプリケーションサーバー(ノード)にこれらの詳細を負わせません。次に、単純なHTTPを介して要求の関連する詳細だけをノードサーバーに転送します。サーバーでは、プロキシはクライアントの要求ではなく、要求の起点としてのみ表示されます。

ノードサーバー自体がHTTPS接続を処理していないため、クライアントとプロキシの間の接続がHTTPSであるかどうかをどのように知ることができますか?それはできません。代理人はその情報も自発的に転送する必要があります。これは、X-Forwarded-* HTTPヘッダーで行われます。特にHTTPかHTTPSかを問わず、情報はX-Forwarded-Protoヘッダーに送られます。

これは単なるHTTPヘッダーです。誰でもこれらのヘッダーを設定できます。クライアント自身がこれらのヘッダーを設定できます。そのため、trust proxy設定のヘッダー(iif)と、(これらのヘッダーを設定するプロキシの背後でアプリが実行されていることがわかっている場合)を使用するように明示的に選択する必要があります。プロキシの背後で実行されていないが、ノードサーバーが直接インターネットにさらされている場合は、その設定をオフにする必要があります。そうしなければ、誰でもそれらのヘッダーを設定できます。サーバーはこれらのヘッダーに従い、誤った情報を使用する可能性があります。

+0

はい、これは非常に徹底していましたが、NodeがHTTPS上に何も設定せずに少し怪しいように見えました。私は今考えを得る。 ありがとう – Ncifra

関連する問題