3

所以说我有一个 node.js 应用程序,它同时托管 HTTP 和 HTTPS 服务器,如问题中所述:如何在 Express.js 中强制 SSL / https

在我的代码中,我有以下内容:

// General configuration settings for production usage
app.configure(function () {
  app.set('port', process.env.PORT || 3000);
  app.set('sslport', process.env.SSLPORT || 4000);
  ...
}

http.createServer(app).listen(app.get('port'), function () {
  winston.info('Express server listening on port ' + app.get('port'));
});

var options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

https.createServer(options, app).listen(app.get('sslport'), function () {
  winston.info('Express server listening on port ' + app.get('sslport'));
});

这对于本地运行的节点服务器非常有效。

但是,我想将我的网站发布到云托管提供商,如 Azure 网站、Heroku、Nodejitsu 等。

所有的云主机似乎都设置了一个process.env.PORT值,但只有一个。创建我的 HTTPS 服务器时,这通常会导致应用程序崩溃,因为 PORT 已在使用/拒绝访问等。

那么如何创建/托管一个具有安全登录页面且只有一个端口可供使用的站点!?

4

1 回答 1

7

如果您使用 Heroku,则无需在 nodejs 中指定端口即可获得 SSL。您需要做的就是监听 http 请求的 heroku PORT 环境变量。上传到 heroku 后,您可以使用 https(在 443 上)或 http(在端口 80 上)寻址您的 heroku 应用程序。Heroku 路由到您的服务器。

同样,如果使用 EC2 的弹性负载平衡,您可以在负载平衡器上使用 SSL 终止,并再次使用 http 路由到侦听端口 80 的节点服务器。http://aws.amazon.com/elasticloadbalancing

在这两种情况下,您都可以根据需要使用自签名或适当的 SSL 证书。

于 2013-02-07T20:57:54.657 回答