タイトルが示唆するとおり、望ましいシナリオは次のとおりです。複数の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のみのソリューションを見つけようとしています。
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!
}
}
});