我有一个nodejs + expressjs应用程序,只需要在http上正常运行。我向应用添加了几个管理员视图,并通过https使用身份验证和我自己的自签名证书来提供这些视图。这意味着在我的应用程序中运行http和https服务器。在我的本地系统上,这适用于驻留在我的" donotcheckin"中的https证书。 。目录
现在我试图让它在负载均衡的弹性beanstalk设置上运行。我已经通过IAM上传了证书和私钥,这似乎有效(我的eb应用程序的http和https网址都可以访问)。
我现在感到困惑的是如何在我的应用程序代码中部署http和https服务器。请通过揭示这两个选项的一些亮点(或建议其他选项)来帮助。
由于负载均衡器已经处理好https,我可以完全放弃https服务器吗?如果是,是否有标题信息确保负载均衡器可以传递给应用程序的标准http服务器,以便它可以检测是否正在安全地访问管理员视图?
我也可以将证书留在负载均衡器以及应用程序的https服务器上。但是,在这个弹性beanstalk自动扩展环境中,为此https服务器访问证书和私钥文件的正确方法是什么?
感谢您的帮助。
答案 0 :(得分:0)
如您所述,您可以将ELB配置为将所有HTTPS和HTTP流量转发到您的应用程序http服务器,从而无需在应用程序中处理任何https配置。你可以参考X-Forwarded-Proto'标头,以检测请求是否来自http vs https。
对于我的用例,我将所有流量转发到https,所以如果标题类型为http,我只需重定向:
app.use(req, res, next) {
if(req.headers['x-forwarded-proto'] == 'http' && process.env.NODE_ENV!=="development"){
res.redirect('https://' + req.headers.host + req.path);
} else {
next();
}
}
如果您希望将证书保留在应用程序中,那么就像将它们留在应用程序目录中的某个位置并在创建服务器时加载它们一样简单,例如this