web-dev-qa-db-ja.com

単一のIPアドレスで、個別のSSL証明書を使用して複数のNode.jsサイト(アプリ/サーバー)を実行する方法は?

タイトルが示唆するとおり、望ましいシナリオは次のとおりです。複数のNode.jsサーバー/アプリ/ウェブサイト、それぞれが独自のSSL証明書を持ち、単一のIPアドレスを持つ単一のサーバー上にある別々のドメイン。これまで私は試しました:

  • プロキシすべての着信要求をキャッチし、個別の非443ポートでそれぞれのアプリ/サーバーに転送する:プロキシサーバーは1つのSSL証明書でのみ実行され、1つを除くすべてのドメインでエラーがスローされます。

  • 異なるポートで実行中のアプリと これらのポートを指すDNS:HTTPS接続は常にポート443。ポート443および80のSRV DNSレコードはこれを変更できません。

  • IPアドレスに対して発行された単一のSSL証明書を使用する:どういうわけか可能ですが、これについて何らかの調査を行った後は、あまり良い考えではありません。

  • 特定のホスト名に応答するサーバーhttpsServer.listen(443,'domain.name') throws Error: listen EADDRNOTAVAIL 123.456.789.000:443。これは、ホスト名がdomain.nameであるものを除くすべての要求をサーバーが無視することを期待した場所です。それでも、1つのポートで複数のサーバーを実行することはできません。

スクエア1に戻ります。必要なのは、特定の要求されたホスト名のSSL証明書との接続を確立し、一意のポートで実行されているアプリ/サーバーに要求を転送するプロキシです。どうやって?編集:Nginx、または他のプロキシ/ファイアウォールソフトウェアを使用することは確かにオプションですが、この時点で、Node.jsのみのソリューションを見つけようとしています。

1
Marko36

Node.jsリバースプロキシである redbird を使用できます。あなたの設定は次のようになります

var proxy = require('redbird')({port: 80});

proxy.register("example1.com", "http://127.0.0.1:8001", {
  ssl: {
    letsencrypt: {
      email: '[email protected]', // Domain owner/admin email
      production: true, // WARNING: Only use this flag when the proxy is verified to work correctly to avoid being banned!
    }
  }
});

proxy.register("example2.com", "http://127.0.0.1:8002", {
  ssl: {
    letsencrypt: {
      email: '[email protected]', // Domain owner/admin email
      production: true, // WARNING: Only use this flag when the proxy is verified to work correctly to avoid being banned!
    }
  }
});