2节点js + express应用程序共享https端口443?

时间:2015-11-17 01:23:57

标签: node.js amazon-web-services amazon-ec2

我有一个ec2实例,我正在托管节点js应用程序(NodeJS1)。我制作了节点js应用程序的替代版本(NodeJS2)。

我为ec2实例注册了一个域名。

我还设置了ec2安全组,以便https使用443 - 似乎没有办法告诉ec2我想在自定义端口上使用https。

由于唯一可能的https端口是443,有什么方法可以让两个nodejs应用程序共享此端口?

修改

我还应该提到我正在使用express for my node js app。我目前正在启动我的应用程序:

var app = express();
app.set('port', process.env.PORT || 3030);
fs = require('fs')
var sslOptions = {
                key: fs.readFileSync('./mykey.key'),
                cert: fs.readFileSync('./mycert.crt'),
        };
https = require('https').createServer(sslOptions, app);
var server = https.listen(app.get('port'), function (err) {
if (err) throw err;
console.log('listening on ' + server.address().port)
});

另一个更新

我现在正在尝试这个:

var httpProxy = require('http-proxy');
var fs = require('fs');
var proxyTable = {};

proxyTable['example.com/baz'] = 'http://localhost:3030';
proxyTable['example.com/buz'] = 'http://localhost:3031';

var httpOptions = {
    router: proxyTable
};
var httpsOptions = {
    router: proxyTable,
    ssl: {
        key: fs.readFileSync('./mykey.key', 'utf8'),
        cert: fs.readFileSync('./mycert.crt','utf8')}
};
httpProxy.createServer(httpsOptions).listen(443, function(err){
        if (err) throw err;
        console.log('proxy listening...');
});

当我运行它时,我收到以下错误:

/home/ec2-user/MacaronicWebApp/node_modules/http-proxy/lib/http-proxy/index.js:119
    throw err;
          ^
Error: Must provide a proper URL as target
    at ProxyServer.<anonymous> (/home/ec2-user/MacaronicWebApp/node_modules/http-proxy/lib/http-proxy/index.js:68:35)
    at Server.closure (/home/ec2-user/MacaronicWebApp/node_modules/http-proxy/lib/http-proxy/index.js:125:43)

我搜索了这个错误,看起来这个方法已经过时(不再支持了)我怎么能得到这种行为?

1 个答案:

答案 0 :(得分:3)

您可以在技术上将它们作为两个单独的应用程序在其他端口上运行,然后使用npm包http-proxy。使用http-proxy,您可以在443上提供所有内容,具体取决于请求的URI。

例如:

router: {
   'example.com/nodejs1': 'localhost:4000',
   'example.com/nodejs2': 'localhost:4001',
   ...
}