Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js ExpressJS节点HTTPS服务器上的Heroku错误H13_Node.js_Ssl_Heroku_Https_Express - Fatal编程技术网

Node.js ExpressJS节点HTTPS服务器上的Heroku错误H13

Node.js ExpressJS节点HTTPS服务器上的Heroku错误H13,node.js,ssl,heroku,https,express,Node.js,Ssl,Heroku,Https,Express,我正在尝试在Node.js服务器(Expressjs框架)上实现HTTPS。我有我的签名证书和密钥,以及用于测试/开发的自签名证书/密钥: if(process.env.NODE_ENV == 'production'){ var app = module.exports = express.createServer({ key: fs.readFileSync('./ssl/nopass_server.key'), cert: fs.readFileSync('./ssl/

我正在尝试在Node.js服务器(Expressjs框架)上实现HTTPS。我有我的签名证书和密钥,以及用于测试/开发的自签名证书/密钥:

if(process.env.NODE_ENV == 'production'){
  var app = module.exports = express.createServer({
    key: fs.readFileSync('./ssl/nopass_server.key'),
    cert: fs.readFileSync('./ssl/server.crt')
  });
} else {
  var app = module.exports = express.createServer({
    key: fs.readFileSync('./ssl/self_signed/nopass_server.key'),
    cert: fs.readFileSync('./ssl/self_signed/server.crt')
  });
}
我还在Heroku上设置了SSL端点。在
localhost
上一切正常,端点似乎工作正常,但当我在生产环境中运行应用程序(在Heroku上)时,我得到一个H13应用程序错误。有趣的是(或者不是),如果我告诉express改为创建HTTP服务器:
var-app=module.exports=express.createServer()
它可以工作,但Chrome会在https://mydomain.com 从中运行不安全的内容http://mydomain.com

我是否可以/不应该在express中为生产创建HTTPS服务器?如果应该的话,我是否需要一些额外的东西来让它在Heroku上工作(例如,我相信它能用
var port=process.env.port
)设置正确的端口?如果没有,我如何提供“安全”的内容,如果它没有运行https服务器,这样浏览器就不会抱怨

我使用以下方法处理任何非https请求:

app.get('*',function(req,res,next){
  if(req.headers['x-forwarded-proto'] != 'https'){
    res.redirect('https://mydomain.com'+req.url);
  } else next();
});
这条路线目前位于我的其他路线的正上方,这是否是问题所在/是否应该在其他地方


一般来说,我对https的经验非常有限,所以我可能遗漏了一些明显的东西。

SSL终止发生在Heroku的负载平衡器上;它们向你的应用发送普通(非SSL)流量,因此你的应用应该创建一个非HTTPS服务器。至于
页面https://mydomain.com 从中运行不安全的内容http://mydomain.com
,确保您的页面正在使用的所有图像/脚本/等也通过
https
协议提供。

您可以使用
app.enable('trust proxy')
,然后
req.secure
也可以在Heroku上工作。

它是非https的,谢谢事实证明,jQueryUICSS中的某些东西导致了警告,即使我在服务器上托管代码。从https-google-cdn中提取它,却消除了警告。