Я использовал nodejs некоторое время с несколькими хостами, используя Express + vhost в Cody-CMS. Теперь я хотел включить также виртуальные https-серверы.несколько сертификатов/vhosts с Express
SNICallback вызывается, но он заканчивается там ... мое приложение-приложение «exp» никогда не вызывается (даже если я заменяю его в createServer простой функцией - в комментариях). Я получаю «запрос для: site1.com» (или site2.com), но ничего не возвращается в браузер.
Для http-серверов он работает идеально.
Любая помощь приветствуется.
"use strict";
var express = require("express");
var vhost = require("vhost");
var fs = require("fs");
var app1 = express();
app1.all("/", function(req, res) {
res.send('Hello World, site #1');
});
var app2 = express();
app2.all("/", function(req, res) {
res.send('Hello World, site #2');
});
//////////////////
// certificates //
//////////////////
var crypto = require('crypto');
const site1 = {
app: app1,
context: crypto.createCredentials({
key: fs.readFileSync('ws.key').toString(),
cert: fs.readFileSync('ws.crt').toString()
}).context
};
const site2 = {
app: app2,
context: crypto.createCredentials({
key: fs.readFileSync('ws2.key').toString(),
cert: fs.readFileSync('ws2.crt').toString()
}).context
};
var sites = {
"www.site1.com": site1,
"site1.com": site1,
"www.site2.com": site2,
"site2.com": site2
};
// put (www.)site1/2.com in /etc/hosts to 127.0.0.1
//////////
// http //
//////////
var exp = express();
for (let s in sites) {
console.log("http -> " + s);
exp.use(vhost(s, sites[s].app));
}
exp.listen(80, function() {
console.log("Listening https on port: 80")
});
///////////
// https //
///////////
var secureOpts = {
SNICallback: function (domain) {
console.log('request for: ', domain);
return sites[domain].context;
},
key: fs.readFileSync('ws.key').toString(),
cert: fs.readFileSync('ws.crt').toString()
};
var https = require('https');
var httpsServer = https.createServer(secureOpts, exp);
// var httpsServer = https.createServer(secureOpts, function(req, resp) { resp.send("hello"); });
httpsServer.listen(443, function() {
console.log("Listening https on port: 443")
});
Спасибо! работает отлично. – Johan
Любой совет, что я должен делать, когда получаю домен, для которого у меня нет учетных данных? – Johan
Возможно, вы можете передать объект ошибки 'cb' для первого параметра вместо' null', как в примере. – mscdex