我正在尝试在我的 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 会抱怨the page at https://mydomain.com ran insecure content from http://mydomain.com
.
我可以不/不应该为生产快速创建 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 的经验非常有限,所以我可能遗漏了一些明显的东西。