Le scénario souhaité est comme le titre le suggère: Plusieurs serveurs/applications/sites Web Node.js, sur des domaines distincts, chacun avec son propre certificat SSL, sur un serveur unique avec une seule adresse IP. Jusqu'ici j'ai essayé:
Un proxy capturant toutes les demandes entrantes et les transférant vers les applications/serveurs respectifs, sur des ports non 443 distincts: ne fonctionne pas, car le serveur proxy peut ne fonctionne que sur un seul certificat SSL, ce qui générera une erreur pour tous les domaines sauf un.
Applications fonctionnant sur différents ports et DNS pointant sur ces ports: ne fonctionne pas, car une connexion HTTPS ira toujours à port 443. L’enregistrement DNS SRV ne peut pas changer cela, pour les ports 443 et 80.
Utiliser un seul certificat SSL émis pour une adresse IP : est possible, mais après quelques recherches, ce n'est pas une si bonne idée.
Serveurs répondant à des noms d'hôte spécifiques : httpsServer.listen(443,'domain.name')
lève Error: listen EADDRNOTAVAIL 123.456.789.000:443
. C'est là que je m'attendais à ce que le serveur ignore toutes les demandes, mais celles où hostname est le domain.name Néanmoins, vous ne pouvez pas exécuter plusieurs serveurs sur un seul port.
Revenons donc à la case départ: il me faut un proxy, qui établit une connexion avec un certificat SSL pour le nom d’hôte demandé spécifique, et transmet la demande à une application/serveur exécutée sur un port unique. Comment? EDIT: Utiliser Nginx, ou un autre logiciel de proxy/pare-feu est certainement une option, mais pour le moment, j'essaie de trouver une solution uniquement Node.js.
Vous pouvez utiliser redbird , un proxy inverse Node.js. Votre configuration ressemblera à quelque chose comme ça
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!
}
}
});