【发布时间】:2020-09-26 07:52:43
【问题描述】:
我是编码新手。我有一个使用“Heroku.com”部署的 node.js 应用程序。我想为应用程序使用自定义域,并使用自定义域激活 SSL。当应用程序使用 Heroku 提供的默认域时,SSL 会自动到位,但是如果我希望 SSL 在使用自定义域时工作,我必须在我的 app.js 文件中包含以下代码才能使 SSL 工作:
app.use((req, res, next) => {
if (req.header('x-forwarded-proto') !== 'https')
res.redirect(`https://${req.header('host')}${req.url}`)
else
next()
});
这很好用,但是当我在本地维护我的应用程序(在 VS Code 中)并使用 localhost:3000 进行测试时,我必须注释掉上面的代码,以便能够使用 locahost 查看应用程序,因为某些原因与 localhost 不使用 HTTPS 有关。
所以我的问题是,是否有一个代码(if 语句或类似的东西)可以在实际环境中使用该代码时运行该代码,或者如果在 localhost 中使用则不运行该代码。这主要是让我不必在部署和测试前后继续注释掉代码。
如果您对此类事情有任何其他建议或更好的解决方案,我将不胜感激。
干杯, 山姆
【问题讨论】:
-
这里有两件事。部署站点上的 SSL 证书和本地主机上的 SSL。它们是两个完全不同的东西。我不是 Heroku 人(更喜欢 Azure),但我认为 Heroku 会自动处理您的 SSL 内容,因为他们管理整个事情。由您管理的 localhost 显然没有 SSL 设置。尝试找出如何在 localhost 上设置 SSL,这应该是您的实际前进方向。
-
@Jay 感谢您,如果您使用他们为您的 Web 应用程序提供的默认域名,Heroku 会自动设置 SSL。但是,您将自定义域名指向 Heroku,然后我需要将代码添加到上面提到的应用程序中,以使 SSL 正常工作。通常在 locahost 上设置 SSL 以用于测试目的吗?
-
当我在本地工作时,我通常不会过多担心 SSL 设置。有时,我正在使用的框架已经设置了 SSL(例如,Visual Studio 自动在 SSL 中运行所有内容,甚至自己添加证书以进行本地测试)。但是,否则,除非我专门测试 SSL,否则我从未使用过它。因此,如果您的测试包含依赖于 SSL 的功能,那么,是的,您应该考虑设置它。如果没有,那么,不,我不会太担心。
标签: javascript node.js ssl heroku https