【发布时间】:2016-07-27 12:30:27
【问题描述】:
我现在在多个主机上使用 nodejs 有一段时间了,在 Cody-CMS 中使用 Express + vhost。现在我还想包括虚拟 https 服务器。
SNICallback 被调用,但它在那里结束......我的 Express 应用程序“exp”从未被调用(即使我在 createServer 中用一个简单的函数替换它——在 cmets 中)。我收到“请求: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")
});
【问题讨论】:
标签: node.js express https virtualhost