我使用ssl有效证书在heroku上部署一个简单的nodejs服务器
var https = require('https');
var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs');
var app = express();
var cors = require('cors');
var credentials = {
key: fs.readFileSync('./cert/key.key'),
cert: fs.readFileSync('./cert/cert.crt'),
ca: fs.readFileSync('./cert/bundle.crt'),
requestCert: true,
rejectUnauthorized: false
};
var server = https.createServer(credentials, app);
var io = require('socket.io')(server);
app.use(cors());
app.use(bodyParser.json({limit: '12mb'}));
app.use(bodyParser.urlencoded({limit: '12mb', extended: true }));
io.on('connection', function(socket){
console.log(socket);
socket.on('authenticate', function(data){
console.log(data);
});
});
var port = process.env.PORT || 8080;
server.listen(port, function () {
console.log("server listen on", this.address());
}); …Run Code Online (Sandbox Code Playgroud) 它正在 localhost 上运行,但在 heroku-app 上关闭
2020-08-15T02:15:31.851406+00:00 app[web.1]: npm ERR! errno 1
2020-08-15T02:15:31.851963+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/" host=yummy-burger-app.herokuapp.com request_id=dc7776de-d03f-4415-9448-fcd71e18efa1 fwd="100.38.167.47" dyno=web.1 connect=1ms service=14ms status=503 bytes=0 protocol=https
Run Code Online (Sandbox Code Playgroud)
如果您需要更多信息,请随时与我联系
我正在尝试在我的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')
});
}
Run Code Online (Sandbox Code Playgroud)
我还在Heroku上设置了SSL端点.一切正常localhost,Endpoint似乎工作正常,但是当我在生产中运行应用程序(在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();
});
Run Code Online (Sandbox Code Playgroud)
目前它位于我的其他路线上方,这可能是问题/应该在其他地方吗?
我对https的一般经验非常有限,所以我可能会遗漏一些明显的东西.