使用Node.js将httpredirect到https

我有一个Node.js服务器,在域上有一个活动的SSL证书。 我已经阅读了一些关于这个网站的回复,但是即使当我涉及到这些已经解决的问题时,我也会得到一个错误。

var express = require('express'); var https = require('https'); var http = require('http'); var path = require('path'); var fs = require('fs'); var mysql = require('mysql'); var queue = {}; var qc = {}; var app = express(); var options = { key: fs.readFileSync('sslcert/domain-name.key', 'utf8'), cert: fs.readFileSync('sslcert/domain-name.csr', 'utf8') }; var httpServer = http.createServer(app); var httpsServer = https.createServer(options, app); /* various stuff to display my website */ httpServer.listen(process.env.PORT); httpsServer.listen(process.env.PORT); 

我在我的控制台中出现以下错误。

 _tls_common.js:67 c.context.setCert(options.cert); ^ Error: error:0906D06C:PEM routines:PEM_read_bio:no start line at Error (native) at Object.createSecureContext (_tls_common.js:67:17) at Server (_tls_wrap.js:754:25) at new Server (https.js:17:14) at Object.exports.createServer (https.js:37:10) at Object.<anonymous> (/srv/data/web/vhosts/default/server.js:35:25) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) 

预先感谢您的回答!

诺埃尔。

cert应该是您的域名的PEM格式的证书,然后是PEM格式的中间证书; 而不是CSR。

cert: fs.readFileSync('sslcert/domain-name.pem', 'utf8')

除了Anand Bhat的回答,你不应该把这两个服务器绑定到你想要做的同一个端口上:

 httpServer.listen(process.env.PORT); httpsServer.listen(process.env.PORT); 

它可能工作,但它可能不会如何工作。 如果你这样做:

 httpServer.listen(process.env.PORT_HTTP); httpsServer.listen(process.env.PORT_HTTPS); 

其中PORT_HTTP是例如80,PORT_HTTPS是例如443,您将始终知道哪个服务器将处理哪个请求。