当前位置: 首页 > 知识库问答 >
问题:

Heroku - Node Express上的HTTPS SSL

公西毅
2023-03-14

我已经创建了一个自签名证书,将其添加到Heroku,并在Heroku上提供了一个SSLendpoint,我记录到< code>heroku certs:info它似乎在那里。

我正在Express上创建我的服务器,如下所示:

var server = require('http').createServer(app);

然后重定向https,如下所示:

app.use(function(req, res, next) {
    var reqType = req.headers["x-forwarded-proto"];
    reqType == 'https' ? next() : res.redirect("https://" + req.headers.host + req.url);
});

服务器运行良好,但是我在S.O .上看到了下面的代码片段,创建一个< code>https服务器:

var keys_dir = './sslcert/';
var server_options = { 
  key  : fs.readFileSync(keys_dir + 'server.key'),
  ca   : fs.readFileSync(keys_dir + 'server.csr'), 
  cert : fs.readFileSync(keys_dir + 'server.crt') 
}

var server = require('https').createServer(server_options,app);

我没有像这个例子那样指向证书/密钥,我的站点是在https上运行的(尽管锁是红色的,因为它是自签名的)。

>

  • 所以,我的问题是,如果我没有像使用server_options的代码片段那样明确地指向密钥/证书,我的服务器如何知道我的密钥/证书?这是由Heroku幕后处理的吗?

    我在 Heroku 上设置的 SSL endpoint如何与我使用 var 服务器创建的 http 服务器交互 = 需要 ('http').创建服务器(应用);

    编辑

    我只是想回答另一个问题:

    “SSL终止发生在Heroku的负载平衡器;它们发送您的应用程序普通(非SSL)流量,因此您的应用应创建非HTTPS服务器。”

    • 它们向您的应用发送普通(非 SSL)流量的确切含义是什么?这是否意味着我不必在我的应用程序中重定向到https
  • 共有1个答案

    斜浩穰
    2023-03-14

    SSL终止是在流量到达您的应用程序之前在Heroku服务器/负载均衡器上完成的。您添加证书的“东西”不是您的dyno,而是Heroku控制的服务器。

    因此,当SSL(https)流量进来时,它在服务器上被“停止”(终止)。该服务器打开一个新的超文本传输协议连接到您的dyno,无论得到什么,它都通过https发送回客户端。

    因此,在您的dyno上,您不需要“弄乱”证书等,您将只看到传入的超文本传输协议流量:无论是直接来自超文本传输协议客户端,还是来自与客户端和超文本传输协议通信的Heroku服务器

    重定向到https是另一回事:如果客户端使用超文本传输协议“来到”您的应用程序,并且您更喜欢他们使用https,请务必重定向。他们将发出一个新请求,这次是https,然后通过Heroku的SSL终止,然后转到您的应用程序。但是现在您知道客户端和Heroku之间的路径是安全的(由于客户端使用https),Heroku SSL终止和您的dyno之间的路径大概是安全的(如果您信任Heroku…)

    HTH

     类似资料:
    • 我用Node.js设置了Socket.io,它通过侦听/连接到端口8000(或另一个不是服务器运行端口的端口)在本地开发机器上工作。 当我试图在heroku上做同样的事情时,客户端脚本导入失败了。 我尝试过相对路径 编辑:我实际上是在使用geddy mvc框架,我想让它在heroku上如何设置(基本上就像socket.io一样),我发现这个答案让我看起来可以类似地使用它:GeddyJS&socke

    • 问题内容: 我创建了一个自签名证书,将其添加到Heroku,并在Heroku上设置了SSL端点,并且我记录它似乎在那里。 我在Express上创建服务器,如下所示: 然后重定向到这样: 服务器运行正常,但是我在SO上遇到了以下代码片段以创建服务器: 我没有像这个示例那样指向证书/密钥,并且我的站点正在https上运行(尽管锁是红色的,因为它是自签名的)。 所以我的问题是,服务器如何知道我的密钥/证

    • 目标 将 https://github.com/Ricardo-Li/node-practice-2 (这个项目已经被删了。参照 https://github.com/alsotang/node-lessons/tree/master/lesson3 的代码自己操作一下吧。)这个项目部署上 heroku,成为一个线上项目 我部署的在这里 http://serene-falls-9294.herok

    • 本文翻译自The Flask Mega-Tutorial Part XVIII: Deployment on Heroku 这是Flask Mega-Tutorial系列的第十八部分,我将在其中部署Microblog到Heroku云平台。 在前面的文章中,我向你展示了托管Python应用程序的“传统”方式,并且我演示了两个部署到Linux的服务器的实际示例。 如果你不曾管理过Linux系统,那幺你

    • 在Heroku上部署我的应用程序破坏了websockets协议。 它在localhost上工作,而不是在Heroku上。在浏览器中,我得到: 到'wss:/node-omi.herokuapp.com/socket.io/?eio=2&transport=WebSocket&sid=*'的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:503 在服务器端,我获得日志: 2

    • 当我试图将我的流星应用程序部署到Heroku时,它在引导时崩溃了。